【问题标题】:Cucumber: Before hook run only once for all scenariosCucumber:在所有场景中只运行一次之前的钩子
【发布时间】:2010-10-24 23:22:11
【问题描述】:

我有一个包含多个场景的场景大纲。我希望我的 Before 挂钩只运行一次,这样我就可以引导我需要针对所有场景运行的 ActiveRecord 对象。问题是如果我使用

Before do
    # my code here
end

这将在每个场景之前执行。反正有没有为整个大纲运行一次?

【问题讨论】:

    标签: ruby-on-rails ruby rspec cucumber


    【解决方案1】:

    我认为,如果您只是在 features/support 中的文件中创建对象,它们将被持久化:

    ImportantThing.create(:name => "USEFUL THING")
    

    这是因为在每个场景之前 Cucumber 都会启动一个数据库事务,然后回滚到之前的状态,该状态应该包含您已加载的对象。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我需要为我的所有事件日志测试创建一次订阅者管理器。如果我只使用了 before 钩子或常规步骤(例如 Given),则将在每个场景之前创建管理器。

      我的解决方案最终是在我的第一个场景中使用标记前挂钩。

      Before('@first_logging_scenario') do
        # do something useful
      end
      

      为了关闭我的经理,我在最后一个场景中使用了标记的 After 挂钩

      After('@last_logging_scenario') do
        # do something useful
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多