0

根据 capybara 的自述文件:

以下两个语句在功能上是等效的:

page.should_not have_xpath('a')
page.should have_no_xpath('a')

但是,当尝试这样做时,这似乎并不正确。使用 capybara-webkit 时,这似乎工作正常:

visit dashboard_accounting_reports_path

click_link 'Delete'

page.should_not have_css('#reports .report')

但是当使用 poltergeist 时,它经常会失败,这似乎是在说它在幕后使用#has_css?,实际上并不会等待给定的元素消失:

 Failure/Error: page.should_not have_css('#reports .report')
   expected #has_css?("#reports .report") to return false, got true

如果我将断言改为这样读取,它似乎每次都成功:

page.should have_no_css('#reports .report')

我疯了,还是这是 poltergeist 中的错误?我正在使用 PhantomJS 1.8.2、poltergeist 1.1.0 和 capybara 2.0.2。

should_not have_css这是示例的调试输出:http: //pastebin.com/4ZtPEN5B

这是should have_no_css示例中的一个:http: //pastebin.com/TrtURWcZ

4

1 回答 1

1

我想我发现了问题 - 我在我的 spec_helper.rb 中要求使用 'capybara/dsl' 而不是 'capybara/rspec',因此should_not来自 Capybara::RSpecMatchers 的正确行为和错误消息未包含在该规范中。

编辑:事实证明,如果您需要“rspec/rails”,它会自动为您带来正确的水豚材料。但是如果你使用一些非标准的 RSpec 东西,比如在请求规范中使用 Capybara,你仍然需要在那里手动包含 Capybara::DSL 和 Capybara::RSpecMatchers。另见:https ://github.com/rspec/rspec-rails/blob/master/Capybara.md

于 2013-03-06T16:49:12.023 回答