_免责声明:此请求特别源于使用 Capybara 进行 JavaScript 验收测试。 虽然我可以看到其他情况的用例。_
我的所有应用程序都经过编码,因此它们在关闭 JS 的情况下也能正常工作,但是当 JS 开启 _on_ 时,您会得到很多漂亮的花里胡哨,让用户体验更加愉快。 正因为如此,从用户的角度来看,大多数事物的交互是相同的; 但是我想测试它是否可以使用和不使用 JS。
我想要做的是设置某种标志来告诉 RSpec 使用每个过滤器集运行相同的规范两次。 就像是:
it 'does this same thing with and without JS enabled', :run_with => [{:js => true}, {:js => false}] do
# stuff here
end
我知道这可以通过共享示例来完成,但生成的代码不是很优雅。
如果您想在 Firefox (Selenium) 上测试 w/o JS (Rack test) w/ JS 和 Webkit (capybara-webkit) 上 w/ JS,则可以另外使用它,如下所示:
it 'does this same thing with and without JS enabled', :run_with => [{:js => false}, {:driver => :selenium}, {:driver => :webkit}] do
# stuff here
end
我也在设想一种使用自定义过滤器来指定run_with
选项的方法,因此它不是那么冗长,例如:
it 'does this same thing with and without JS enabled', :run_with_all_drivers => true do
# stuff here
end
想法? 我查看了文档和代码,但目前没有找到使用过滤器执行此操作的方法。
过滤器并不是真正设计为开箱即用的,但是在我们不更改 RSpec 的情况下,不难获得您所要求的行为:
[true, false].each do |js|
it 'does this same thing with and without JS enabled', :run_with => {:js => js } do
# stuff here
end
end
如果这是您需要的常见模式,您可以为它创建一个小的 DSL 方法:
module WithAndWithoutJS
def with_and_without_js(&block)
[true, false].each do |js|
context "with :js => #{js}", :run_with => { :js => js } do
module_eval(&block)
end
end
end
RSpec.configure { |c| c.extend self }
end
然后你可以像这样使用这个方法:
describe "My integration spec" do
with_and_without_js do
it "does something with and without js" do
end
end
end
我认为这非常优雅。 改变过滤器的工作方式来完成你所要求的将是一个相当重要的变化,它会给 RSpec 团队增加未来的维护负担,因为我希望很少使用这个功能,所以我的直觉是不将它添加到核心.
也就是说,如果您想创建一个提供此功能的rspec-multi-filters
gem,请随意:)。
@myronmarston像往常一样,这只是我对 RSpec 可以做什么的无知。 感谢您抽出时间进行澄清。 我认为这会很好地工作。 :)
:+1: 真棒
最有用的评论
过滤器并不是真正设计为开箱即用的,但是在我们不更改 RSpec 的情况下,不难获得您所要求的行为:
如果这是您需要的常见模式,您可以为它创建一个小的 DSL 方法:
然后你可以像这样使用这个方法:
我认为这非常优雅。 改变过滤器的工作方式来完成你所要求的将是一个相当重要的变化,它会给 RSpec 团队增加未来的维护负担,因为我希望很少使用这个功能,所以我的直觉是不将它添加到核心.
也就是说,如果您想创建一个提供此功能的
rspec-multi-filters
gem,请随意:)。