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

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

Before do # my code here end 

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

我想如果您只是在function/支持的文件中创建对象,它们将被保留:

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

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

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

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

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

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

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