【发布时间】:2010-10-24 23:22:11
【问题描述】:
我有一个包含多个场景的场景大纲。我希望我的 Before 挂钩只运行一次,这样我就可以引导我需要针对所有场景运行的 ActiveRecord 对象。问题是如果我使用
Before do
# my code here
end
这将在每个场景之前执行。反正有没有为整个大纲运行一次?
【问题讨论】:
标签: ruby-on-rails ruby rspec cucumber
我有一个包含多个场景的场景大纲。我希望我的 Before 挂钩只运行一次,这样我就可以引导我需要针对所有场景运行的 ActiveRecord 对象。问题是如果我使用
Before do
# my code here
end
这将在每个场景之前执行。反正有没有为整个大纲运行一次?
【问题讨论】:
标签: ruby-on-rails ruby rspec cucumber
我认为,如果您只是在 features/support 中的文件中创建对象,它们将被持久化:
ImportantThing.create(:name => "USEFUL THING")
这是因为在每个场景之前 Cucumber 都会启动一个数据库事务,然后回滚到之前的状态,该状态应该包含您已加载的对象。
【讨论】:
我遇到了同样的问题,我需要为我的所有事件日志测试创建一次订阅者管理器。如果我只使用了 before 钩子或常规步骤(例如 Given),则将在每个场景之前创建管理器。
我的解决方案最终是在我的第一个场景中使用标记前挂钩。
Before('@first_logging_scenario') do
# do something useful
end
为了关闭我的经理,我在最后一个场景中使用了标记的 After 挂钩
After('@last_logging_scenario') do
# do something useful
end
【讨论】: