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
答案 0 :(得分:1)
密钥在this paragraph from rspec-rails
中说明请求规范存在于规范/请求,规范/ api和规范/集成中,并混合行为ActionDispatch :: Integration :: Runner,这是Rails集成测试的基础。目的是使用黑盒方法从端到端指定一个或多个请求/响应周期。
Capybara-based specs应留在spec/features
,因为这样就包含了Capybara :: DSL。
但请记住,行为可能不一样。 spec/features
不会混合整个Rails环境。如果依靠某些引导功能来填充Fill
表,则可能无效。
无论如何,不建议在全球范围内填充它。使用before
或set
设置您的测试。