Cucumber:每个特性单独传递,但不能同时传递

Cucumber:每个特性单独传递,但不能同时传递,cucumber,capybara,Cucumber,Capybara,我正在编写一个Rails 3.1应用程序,我有一套三个cucumber功能文件。单独运行时,如: cucumber features/quota.feature -- or -- cucumber features/quota.feature:67 # specifying the specific individual test cucumber …每个功能文件运行正常。但是,当所有这些都一起运行时,例如: cucumber features/quota.feature -- or --

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

cucumber features/quota.feature
-- or --
cucumber features/quota.feature:67  # specifying the specific individual test
cucumber
…每个功能文件运行正常。但是,当所有这些都一起运行时,例如:

cucumber features/quota.feature
-- or --
cucumber features/quota.feature:67  # specifying the specific individual test
cucumber
…其中一项测试失败。这很奇怪,因为只有一个测试失败;特性中的所有其他测试都通过了(其中许多测试都做了类似的事情)。我把这个测试放在特性文件的什么地方似乎无关紧要;如果这是第一次测试或是在某个地方,它就会失败


我认为它不可能是测试本身,因为它在单独运行时通过,或者甚至在单独运行整个功能文件时通过。看起来这一定是与同时运行不同的功能文件有关的效果。你知道会发生什么吗?

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


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

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


您应该通过使场景完全独立来解决它。任何场景的工作都不应影响其他场景的结果。在和中受到了极大的鼓励。

我也遇到了类似的问题,我花了很长时间才找到根本原因。 我使用@selenium标记在selenium客户端上测试JQuery脚本。 我的页面有一个ajax调用,该调用正在发送POST请求。我的javascript有一个bug,post请求失败了。(该功能尚未完成,我还没有编写验证ajax调用结果的步骤。) 此错误记录在
Capybara.current\u session.server.error
中。 当执行以下非selenium功能时,Capybara中的一个Before钩子被称为
Capybara.reset\u 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调用。 所以安德烈·博塔洛夫和道格·诺埃尔是对的。我继承了以前的一篇专题片。 我必须一直进行调试,直到找到引发的异常并调查是什么导致了它。
我希望这能帮助那些没有意识到他们继承了早期功能的人。

我也有类似的问题,我花了很长时间才找到根本原因。 我使用@selenium标记在selenium客户端上测试JQuery脚本。 我的页面有一个ajax调用,该调用正在发送POST请求。我的javascript有一个bug,post请求失败了。(该功能尚未完成,我还没有编写验证ajax调用结果的步骤。) 此错误记录在
Capybara.current\u session.server.error
中。 当执行以下非selenium功能时,Capybara中的一个Before钩子被称为
Capybara.reset\u 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调用。 所以安德烈·博塔洛夫和道格·诺埃尔是对的。我继承了以前的一篇专题片。 我必须一直进行调试,直到找到引发的异常并调查是什么导致了它。
我希望这能帮助那些没有意识到他们继承了早期功能的人。

Hi Andrey,这必须是功能文件之间耦合的结果,而不是场景,因为每个功能文件中的所有场景在单独运行功能文件时都起作用。这是我从来没有听说过的。@不是您要问的问题,因为您可能在不同功能文件中的某个场景之间存在耦合。这种耦合可能是由于您在另一个功能中的某个场景之后数据未正确重置所致。最有可能的是,它在开始时甚至不会运行是因为另一种情况使数据处于不良状态。或者,您可能需要检查以确保在单独运行时未使用命令行标志,而在调用cucumber时未使用。很好的调用,这是正确的。我将问题功能文件隔离为一个功能,然后开始从以前运行的功能文件中删除场景,直到测试通过。这将我指向一个地方,我在测试中设置了一个服务器变量(并没有正确地将其重置为其他测试的背景)。我很惊讶这只在一个例子中对我有点小影响。嗨,Andrey,这必须是功能文件之间耦合的结果,而不是场景,因为每个功能文件中的所有场景都在单独运行功能文件时工作。这是我从来没有听说过的。@不是您要问的问题,因为您可能在不同功能文件中的某个场景之间存在耦合。这种耦合可能是由于您在另一个功能中的某个场景之后数据未正确重置所致。最有可能的是,它在开始时甚至不会运行是因为另一种情况使数据处于不良状态。或者,您可能需要检查以确保在单独运行时未使用命令行标志,而在调用cucumber时未使用。很好的调用,这是正确的。我将问题功能文件隔离为一个功能,然后开始从以前运行的功能文件中删除场景,直到测试通过。这让我找到了一个我正在设置