我想在 rspec 中测试是否存在提交按钮。我也在用 capybara 。
我试过:
should have_tag("input","Submit button")
和
should have_content("Submit, button")
但它要么引发异常,要么给出误报。
最佳答案
这些都是很好的建议,但是如果你想确认它是一个按钮并且它有正确的值(用于显示),你必须更详细一点:
page.should have_selector("input[type=submit][value='Press Me']")
我不知道现有的匹配器可以做到这一点。这是我编写的自定义 RSpec2 匹配器:
RSpec::Matchers.define :have_submit_button do |value|
match do |actual|
actual.should have_selector("input[type=submit][value='#{value}']")
end
end
这是 RSpec3 版本(@zwippie 提供):
RSpec::Matchers.define :have_submit_button do |value|
match do |actual|
expect(actual).to have_selector("input[type=submit][value='#{value}']")
end
end
我将其与其他自定义匹配器一起保存在 spec/support/matchers/request_matchers.rb
中。 RSpec 会自动拾取它。由于这是一个 RSpec 匹配器(而不是 Capybara 查找器),它将在特征规范 (Capybara) 和 View 规范(没有 Capybara 的 RSpec)中工作。
功能规范用法:
page.should have_submit_button("Save Me")
查看规范用法(调用render
后):
rendered.should have_submit_button("Save Me")
请注意,如果您在 Capybara 请求规范中,并且想要与提交按钮进行交互,那会容易得多:
click_button "Save Me"
不能保证它实际上是一个提交按钮,但您的功能规范应该只是测试行为而不用担心那个级别的细节。
关于ruby - 如何测试 capybara 中是否存在提交按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573518/