经过一段时间的 Cucumber 和 RSpec BDD,我意识到我的许多 Cucumber 功能只是更高级别的 View 测试。
当我开始编写我的场景然后转向 RSpec 时,我从不编写 View 规范,因为我可以只复制和粘贴场景的一部分,这将是丑陋的复制。
以这个场景为例
Scenario: New user comes to the site
Given I am not signed in
When I go to the home page
Then I should see "Sign up free"
我知道这不是直接测试 View ,但编写单独的 View 规范来检查相同的东西对我来说似乎是多余的。
我接近 Cucumber 是不是错了? 我究竟应该在 View 规范中测试什么?
我应该为每个单独的 View 编写它们吗,例如测试像这样的操作的 View
def show
@project = current_user.projects.first
end
还是我应该只测试更复杂的 View ?
最佳答案
在 RSpec 中永远不应该测试 View 是一种被广泛接受(在我看来是不正确的)的 Cucumber 理念。争论是因为 View 的行为可以在 Cucumber 中描述,RSpec 应该坚持它最了解的东西——模型和 Controller 。
我认为 Cucumber 的“人类可读”方面使 View 规范的某些方面变得重要。例如,我发现 View 规范在与前端开发人员并行工作时非常有效。如果 JavaScript 开发人员知道他想连接到您页面上的选择器,那么您的 View 提供该选择器就很重要。
例如:
describe 'gremlins/show.html.haml' do
context 'given it is after midnight' do
it 'has a #gremlin_warning selector' do
Time.stub!(:now).and_return(Time.parse '2010-12-16 00:01:00')
rendered.should have_selector '#gremlin_warning'
end
end
context 'it is before midnight' do
it 'does not have a #gremlin_warning selector' do
Time.stub!(:now).and_return(Time.parse '2010-12-16 23:59:00')
rendered.should_not have_selector '#gremlin_warning'
end
end
end
请注意,规范不描述内容,它们故意简短,并且不描述交互行为。因为 View 是应用程序中更改最多的部分,所以应谨慎使用 View 规范。
tl;dr:查看规范用于与其他开发人员交流契约(Contract),应该谨慎使用(但仍然应该使用)。
关于ruby-on-rails - 我什么时候应该在 Cucumber 和 RSpec 工作流中单独测试 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4463253/