【发布时间】:2011-02-22 03:03:12
【问题描述】:
我有一个 Rails 3 项目,我想将当前选择的公司存储在会话变量中。
我正在使用人员控制器规范,并且想暂时删除 current_company,因为我正在为人员新控制器操作隔离我的规范示例。
it "should call current_company" do
company = mock_model(Company, :id => "1")
controller.should_receive(:current_company).and_return(company)
get :new
end
这是我对员工控制器的新操作
def new
@staff = Staff.new
@staff.company_id = current_company.id
end
我总是出错
Failure/Error: get :new
NameError:
undefined local variable or method `current_company' for #<StaffsController:0x000000028d6ad8>
我也尝试过将其存根而不是使用 should_receive
controller.stub!(:current_company).and_return(company)
我得到同样的错误。
【问题讨论】:
-
current_company 在哪里定义?
-
没有,这就是为什么我想把它存根。我将在 ApplicationController 中结束。如果我在我的 ApplicationController 中放置一个名为 current_company 的方法,错误就会消失,但是有没有办法将它存根以隔离我的控制器测试?
-
您可以在您的测试中存根它,但如果它不存在,您不能尝试在您的应用程序代码中使用它。存根仅适用于您的测试类。
-
好的,我应该先指定我的 ApplicationController,然后为 current_company 编写一个方法吗?
-
>> 如果它不存在,您不能尝试在应用程序代码中使用它
标签: ruby-on-rails session rspec stub