根据水豚的自述文件:
以下两个陈述在功能上是等同的:
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')
我是疯了还是这是一个恶作剧的错误?我正在使用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
答案 0 :(得分:1)
我想我发现了问题 - 我一直在我的spec_helper.rb而不是'capybara / rspec'中要求'capybara / dsl',所以来自Capybara :: RSpecMatchers的正确should_not
行为和错误消息是不包括在该规范中。
编辑:事实证明,如果你需要'rspec / rails',它会自动为你带来正确的水豚。但是如果你使用一些非标准的RSpec东西,比如在请求规范中使用Capybara,你仍然需要在那里手动包括Capybara :: DSL和Capybara :: RSpecMatchers。另见:https://github.com/rspec/rspec-rails/blob/master/Capybara.md