我如何摆脱@controller在我的testing是零误差
我不断收到
@controller is nil: make sure you set it in your test's setup method.
当我运行我的testing。 任何想法这是什么意思?
当您从ActionController :: TestCaseinheritance时,它会从testing名称推断控制器名称,如果它们不匹配,则必须使用testing的setup
部分来设置它。
所以,如果你有
class PostsControllerTest < ActionController::TestCase def test_index #assert something end end
然后@controller
被自动实例PostsController
,但是,如果这不是这种情况,你有一个不同的名字,你将需要一个setup
class SomeTest < ActionController::TestCase def setup @controller = PostController.new end end
我正在从轨道4的testing版升级到rspec 3的过程中,并遇到此错误。 结果问题是我们的控制器规范描述的是使用符号而不是string的语句。 Rspec试图将这个符号实例化为控制者,但实际上他们是“行动”。
#trys to set @controller = Index.new describe SomeController do describe :index do before do get :index, format: :json end it { expect(response).to be_success} end end #works describe SomeController do describe 'index' do before do get :index, format: :json end it { expect(response).to be_success} end end
ErsatzRyan答案是正确的,但是有一个小的错字。 代替
@controller = PostController
它应该是
@controller = PostController.new
否则你会得到一个错误:未定义的方法`response_body ='
或者,你可以简单地这样做:
RSpec.describe PostsControllerTest, :type => :controller do # ... end
如果名称匹配,并且@controllervariables仍然为零,请尝试检查控制器实例中的错误。 对我来说,我有一个控制器初始化方法,它有一个错误。 出于某种原因,控制器在testing中只是零,而不是在没有实例化时抛出错误。
检查你是否正在结束并正确结束。
RSpec.describe LeadsController, type: :controller do # All tests should come here end