黄瓜:每个特征都单独传递,但不能一起传递

时间:2012-07-08 17:58:55

标签: cucumber capybara

我正在编写一个Rails 3.1应用程序,我有一组三个黄瓜功能文件。单独运行时,如:

cucumber features/quota.feature
-- or --
cucumber features/quota.feature:67  # specifying the specific individual test

...每个功能文件运行正常。但是,当所有的一起运行时,如:

cucumber

......其中一项测试失败。这很奇怪,因为只有一个测试失败;功能传递中的所有其他测试(其中许多都做类似的事情)。在我放置此测试的功能文件中的哪个位置似乎并不重要;如果它是某个地方的第一次测试或方式,它就会失败。

我不认为它可以是测试本身,因为它在单独运行时传递,或者甚至在单独运行整个功能文件时传递。看起来它必须与一起运行不同的功能文件有关。有什么想法可能会发生什么?

2 个答案:

答案 0 :(得分:3)

看起来您的方案之间存在耦合。您的失败方案假定系统处于某种状态。当场景单独运行时,系统处于此状态,因此场景通过。但是,当您运行所有方案时,先前运行的方案会更改此状态,因此会失败。

您应该通过使场景完全独立来解决它。任何场景的工作都不应影响其他场景的结果。在Cucumber BookSpecification by Example中非常鼓励。

答案 1 :(得分:0)

我遇到了类似的问题,我花了很长时间才找出根本原因。 我正在使用@selenium标签来测试selenium客户端上的JQuery脚本。 我的页面有一个发送POST请求的ajax调用。我在javascript中有一个错误,并且帖子请求失败了。 (该功能尚未完成,我还没有编写步骤来验证ajax调用的结果。) 此错误记录在Capybara.current_session.server.error中。 当执行以下非selenium功能时,Capybara中的Before hook称为Capybara.reset_sessions! 然后调用

def reset!
  driver.reset! if @touched
  @touched = false
  raise @server.error if @server and @server.error
ensure
  @server.reset_error! if @server
end

@server.error对于以下功能中的每个场景都不是零,而Cucumber报告每个步骤都被跳过。 在我的情况下解决方案是修复ajax调用。 所以Andrey Botalov和Doug Noel是对的。我从早期的功能中继承了。 我必须继续调试,直到我发现正在引发的异常并调查生成它的内容。 我希望这可以帮助那些没有意识到自己已经延续过早期功能的其他人。