我无法在功能之间清理数据库。 我尝试使用Before钩子,但是它针对每个场景运行,但我只需要在每个功能的开头清理数据库,而不是在场景之间清理。
任何建议都会有所帮助。
答案 0 :(得分:0)
我使用DatabaseCleaner https://github.com/DatabaseCleaner/database_cleaner我很满意
config.before(:each) do |spec|
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.start
...
end
config.append_after(:each) do
DatabaseCleaner.clean
end
在rails_herper.rb
中答案 1 :(得分:0)
以下是示例配置
before(:all) do
DatabaseCleaner.clean
end
在RSpec中,你有标签,类型,钩子等。
在您的情况下,最简单的方法是在每个文件中添加before(: all)
。
这将在所描述的上下文中的所有测试之前开始清洁。
来自文档Rspec Docs
之前(:所有)块在组
中的所有示例之前运行一次
答案 2 :(得分:0)
应该在每个场景之前清理数据库,因为Cucumber打算这样做。阻止黄瓜这样做是一种错误的优化,一种常见的反模式,随后是许多经验较少的黄瓜用户。场景永远不应该相互依赖。
要使其正常工作,请删除您添加到应用程序中的所有代码,以限制黄瓜清理数据库的方式。
如果您不确定如何操作,请使用您正在使用的相同ruby和rails版本创建一个新的rails项目,然后添加cucumber-rails gem。它将按预期设置一切。您可以使用之前/之后的diff-rails进行比较。
答案 3 :(得分:0)
您可以使用以下代码在每个方案的之前(不是之后)清理数据库。只需将其添加到您的features/support/env.rb
Cucumber::Rails::Database.autorun_database_cleaner = false
DatabaseCleaner.strategy = :truncation
Cucumber::Rails::Database.javascript_strategy = :truncation
Before do
DatabaseCleaner.clean
end
答案 4 :(得分:0)
只是变通/破解,以防万一您尚未找到解决方案。 这里的技巧是使用标记的黄瓜钩子!
在功能文件的最后一个方案中提供@LastScenario之类的标签。 然后使用黄瓜的@After钩子执行操作,说根据您的情况清除数据。 就像是: @LastScenario 方案:我的方案名称 鉴于我有东西...
然后在Hooks.java类中:
public class Hooks {
@After("@LastScenario")
public void dataCleanUp() {
CleanUpScripts cleanUpScripts = new CleanUpScripts();
cleanUpScripts.dataCleanUp();
}
}
也可以根据需要使用@Before Hook进行相同操作。