<model> .last在spec / integration / ...中工作但在spec / features /...?</model>时失败/错误

时间:2013-12-12 18:22:16

标签: ruby-on-rails rspec capybara

Rails 4.0.0; RSpec 2.14.x; Capybara 2.1.0

重构/重新组织绿色中的一些规格。

describe 'Visiting propane_fill_path' do
  shared_examples_for 'with a recorded fill' do |fill_sym|
    context 'when not signed in' do
      include_examples 'visiting redirects to user sign in', :propane_fill_path, Fill.last
    ...

spec/integration/...时有效;但当我将其移至spec/features/...(没有其他文件移动,更改,)时,它会失败

ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"propane/fills", :id=>nil, :format=>nil} missing required keys: [:id]

因此,对于所有相同的before()let() / let!() s,。,Fill.last在此不同目录中的行为方式不同?

当我将describe更改为feature例如,以使:type与该位置匹配时无效?)

规范路径是否意味着改变执行行为?

TIA

1 个答案:

答案 0 :(得分:1)

密钥在this paragraph from rspec-rails

中说明
  

请求规范存在于规范/请求,规范/ api和规范/集成中,并混合行为ActionDispatch :: Integration :: Runner,这是Rails集成测试的基础。目的是使用黑盒方法从端到端指定一个或多个请求/响应周期。

Capybara-based specs应留在spec/features,因为这样就包含了Capybara :: DSL。

但请记住,行为可能不一样。 spec/features不会混合整个Rails环境。如果依靠某些引导功能来填充Fill表,则可能无效。

无论如何,不​​建议在全球范围内填充它。使用beforeset设置您的测试。