Rspec 的 feature specs 和 request specs 之间的概念区别是什么?
从功能规范文档:
功能规范是高级测试,旨在通过应用程序执行部分功能。他们应该只通过其外部接口驱动应用程序,通常是网页。
对于请求规格:
请求规范为 Rails 的集成测试提供了一个精简的包装器,旨在通过整个堆栈驱动行为,包括路由(由 Rails 提供)和没有存根(这取决于你)。使用请求规范,您可以: 指定单个请求 跨多个控制器指定多个请求 跨多个会话指定多个请求
我知道功能规范使用 Capybara 而请求规范不使用。但这几乎不值得不同的概念。
概念上的区别在于您通常在测试用户故事,并且所有交互都应通过用户界面驱动。这就是 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'
)?就个人而言,我不喜欢在这类规范中使用任何应用程序内部。