黄瓜:在所有情况下钩子运行一次之前

时间:2010-10-24 23:22:12

标签: ruby-on-rails ruby rspec cucumber

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

Before do
    # my code here
end

这将在每个场景之前执行。无论如何都要为整个大纲运行一次吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

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

要关闭我的经理,我在上一个场景中使用了标记的After hook

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