如何测试水豚中是否存在提交按钮?

son*_*002 17 ruby rspec capybara

我想在rspec中测试是否存在提交按钮.我也在使用水豚.

我试过了:

should have_tag("input","Submit button")
Run Code Online (Sandbox Code Playgroud)

should have_content("Submit, button")
Run Code Online (Sandbox Code Playgroud)

但它要么引发异常,要么给出误报.

Jim*_*art 34

这些都是很好的建议,但是如果你想确认它是一个按钮并且它具有正确的值(用于显示),你必须更加详细一些:

page.should have_selector("input[type=submit][value='Press Me']")
Run Code Online (Sandbox Code Playgroud)

我不知道现有的匹配器是做到这一点的.这是我写的自定义RSpec2匹配器:

RSpec::Matchers.define :have_submit_button do |value|
  match do |actual|
    actual.should have_selector("input[type=submit][value='#{value}']")
  end
end
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

我将其spec/support/matchers/request_matchers.rb与其他自定义匹配器保持一致.RSpec会自动选择它.由于这是一个RSpec匹配器(而不是Capybara finder),它可以在功能规格(Capybara)和视图规格(没有Capybara的RSpec)中工作.

功能规格用法:

page.should have_submit_button("Save Me")
Run Code Online (Sandbox Code Playgroud)

查看规范用法(致电后render):

rendered.should have_submit_button("Save Me")
Run Code Online (Sandbox Code Playgroud)

请注意,如果您处于Capybara请求规范中,并且您希望与提交按钮进行交互,则更容易:

click_button "Save Me"
Run Code Online (Sandbox Code Playgroud)

不能保证它实际上是一个提交按钮,但您的功能规格应该只是测试行为而不是担心这个细节级别.


kof*_*rei 16

有一个内置匹配器has_button?.

使用RSpec你可以有一个断言

page.should have_button('Submit button')
Run Code Online (Sandbox Code Playgroud)

或者使用新的RSpec 3语法:

expect(page).to have_button('Submit button')
Run Code Online (Sandbox Code Playgroud)