0

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

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

...每个功能文件运行良好。但是,当它们一起运行时,如下所示:

cucumber

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

我不认为它可以是测试本身,因为它在单独运行时通过,甚至在整个功能文件单独运行时通过。似乎它必须与一起运行不同的功能文件有关。任何想法可能会发生什么?

4

2 回答 2

4

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

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

于 2012-07-08T18:19:43.123 回答
0

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

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 was not nil for each scenario in the following feature(s) and Cucumber reported each step as skipped. The solution in my case was to fix the ajax call. So Andrey Botalov and Doug Noel were right. I had carry over from an earlier feature. I had to keep debugging until I found the exception that was being raised and investigate what was generating it. I hope this helps someone else that didn't realise they had carry over from an earlier feature.

于 2013-01-31T23:34:53.973 回答