Answers:
概念上的差异是您通常在测试用户故事,并且所有交互都应通过用户界面来驱动。那就是Capybara的用武之地。一个请求规范仍在测试您的应用程序的行为,并且不期望验收测试具有可读性。因此,具有用于验收测试的改进语法的功能。
技术差异包括请求规范包装了Rails集成测试,而功能规范则没有。这意味着根据请求规范,您可以使用get,post,put,delete和assert来响应响应。使用功能规范,您应该通过浏览器推动所有交互,并使用诸如访问和针对页面断言之类的方法。
我建议阅读github上rspec-rails源代码中的feature_spec.feature。我希望这有帮助。
"GET /login"
在块与预期it
块,例如expect(response.status).to eq(200)
和expect(response).to render_template(:new)
,或在一个describe "POST /sessions"
,一个context "with valid credentials"
块,与expect(response).to redirect_to(user)
和follow_redirect!; expect(response.body).to include("Signed in")
visit users_path
)或硬编码的字符串(visit '/users'
)?就个人而言,我不希望在那种规格中使用任何应用程序内部。