【问题标题】:Cucumber: Each feature passes individually, but not togetherCucumber:每个特征单独通过,但不能一起通过
【发布时间】:2012-07-08 17:58:55
【问题描述】:

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

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

...每个功能文件运行良好。但是,当所有运行在一起时,就像:

cucumber

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

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

【问题讨论】:

    标签: cucumber capybara


    【解决方案1】:

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

    你应该通过让你的场景完全独立来解决这个问题。任何场景的工作都不应影响其他场景的结果。在Cucumber BookSpecification by Example 中强烈鼓励它。

    【讨论】:

    • 您好 Andrey,它必须是功能文件之间的耦合效应,而不是场景,因为每个功能文件中的所有场景都在功能文件单独运行时起作用。这是我从未听说过的。
    • @notthequestionyourelookingfor 也许你在不同特征文件中的场景之间存在耦合。
    • 这种耦合可能是由于您在另一个功能中的一个场景后没有正确重置数据。最有可能的是,它甚至不会在开始时运行的原因是因为其他情况之一是使数据处于不良状态。或者,您可能需要检查以确保您在单独运行时没有使用命令行标志,而您在调用 cucumber 时没有使用。
    • 好电话,这是正确的。我将问题功能文件隔离为一个功能,然后开始从之前运行的功能文件中删除场景,直到测试通过。这将我指向了一个我在测试中设置服务器变量的地方(并且没有正确地将其重置为其他测试的背景)。我很惊讶这只是在一个例子中咬了我。
    【解决方案2】:

    我遇到了类似的问题,我花了很长时间才找出根本原因。 我正在使用 @selenium 标签在 selenium 客户端上测试 JQuery 脚本。 我的页面有一个发送 POST 请求的 ajax 调用。我在 javascript 中有一个错误,并且发布请求失败。 (该功能不完整,我还没有编写步骤来验证 ajax 调用的结果。) 此错误记录在Capybara.current_session.server.error 中。 当执行以下非硒功能时,Capybara 中的 Before 挂钩称为 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 在以下功能中的每个场景中都不是 nil,并且 Cucumber 报告每个步骤都已跳过。 我的解决方案是修复 ajax 调用。 所以安德烈·博塔洛夫和道格·诺埃尔是对的。我从早期的功能中继承下来。 我不得不继续调试,直到找到引发的异常并调查产生它的原因。 我希望这可以帮助那些没有意识到他们继承了早期功能的其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多