恶作剧者是否应该支持水豚的正确选择?

时间:2013-03-06 15:58:44

标签: rspec capybara poltergeist

根据水豚的自述文件:

  

以下两个陈述在功能上是等同的:

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

1 个答案:

答案 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