ruby - 如何测试 capybara 中是否存在提交按钮?

标签 ruby rspec capybara

我想在 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/

相关文章:

ruby-on-rails - 如何将 split 与存储在变量中的正则表达式一起使用?

ruby-on-rails - RoR 中的 Spring 服务器的功能是什么?

ruby - if + else 和 if -> unless 不一致

ruby - 单击不使用 React 组件 + capypara

arrays - 通过唯一键合并 Ruby 中的两个数组

python - 在新的Apple Silicon架构上运行Ruby,Node,Python和Docker?

ruby-on-rails - rspec 的代码覆盖率

ruby-on-rails - 用于检查唯一性的 Rspec 测试

ruby-on-rails - capybara + Selenium

rspec - 如何测试 id 为 'foo' 的表行是否具有某个类?