nat*_*vda 12 rspec ruby-on-rails rspec2
我有一个简单的控制器测试,包含以下代码:
context "POST :create" do
before (:each) do
post :create, :user_id => @user.id,
:account => { .. some data ... }
end
it { response.status.should == 201 }
it { response.location.should be_present }
end
Run Code Online (Sandbox Code Playgroud)
现在我想到了一种非常简单的方法来加速这个测试,并使用一个before(:all)而不是一个before(:each).在这种情况下,帖子只会做一次.
所以我写道:
context "POST :create" do
before (:all) do
post :create, :user_id => @user.id,
:account => { .. some data ... }
end
it { response.status.should == 201 }
it { response.location.should be_present }
end
Run Code Online (Sandbox Code Playgroud)
但后来我收到以下错误:
RuntimeError:
@routes is nil: make sure you set it in your test's setup method.
Run Code Online (Sandbox Code Playgroud)
这是设计的吗?有没有办法规避它?
nat*_*vda 12
我在rspec邮件列表上问了这个问题,得到了@dchelimsky自己的以下回复:
是.rspec-rails包含rails的测试框架,其中没有before(:all)概念,因此在每个示例之前重置所有数据.即使我们想在rspec-rails中支持这一点(我没有),也需要首先更改rails.
因此,在a中执行控制器调用是不可能的before(:all),它只能用于设置数据库或实例变量.
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |