如何将值从规范文件传递到控制器

how to pass value from spec file to controller

我想对现有代码编写 rspec 测试。现有代码为

def getperson
  log_middle('getperson') do
    @filteredPersons = Person.where(['UserID=?', @@userID])
  end
  @filteredPersons
end

我想从 rspec 文件中分配值 @@userID。如何在 person_spec 文件

中为其赋值

您可以像 an actionmailer test setup here 一样使用 class_variable_set(虽然这是 MiniTest 设置,但想法是相同的,您也可以用于 rspec)。

所以你的测试用例看起来像这样

# test_helper
def with_user_id(user_id)
  old_user_id = ClassUnderTest.class_variable_get(:@@userID)
  ClassUnderTest.class_variable_set(:@@userID, user_id)
  yield
ensure
  ClassUnderTest.class_variable_set(:@@userID, old_user_id)
end

# your test
with_user_id(123) do
  get_person ...
  expect(...)
end

或者如果您不关心副作用:

# ...
context "@@userID is 123" do
  before(:each) do
    ClassUnderTest.class_variable_set(:@@userID, 123)
  end

  it "should ..." do
    getperson ...
    expect(...).to ...
  end
end
# ...