如何清理黄瓜栏中不同功能之间的数据库?

问题描述 投票:0回答:5

我在功能之间清理数据库时遇到了麻烦。我尝试使用Before钩子,但它为每个场景运行,但我只需要在每个功能的开头清理数据库,而不是在场景之间。

任何的意见都将会有帮助。

ruby-on-rails cucumber database-cleaner
5个回答
0
投票

我使用DatabaseCleaner qazxsw poi我很满意

https://github.com/DatabaseCleaner/database_cleaner

在rails_helper.rb中


0
投票

这是示例配置

  config.before(:each) do |spec|
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.start
    ...
  end

  config.append_after(:each) do
    DatabaseCleaner.clean
  end

在RSpec中,你有标签,类型,钩子等。在你的情况下,最简单的方法是在每个文件中添加before(:all) do DatabaseCleaner.clean end 。这将在所述上下文中的所有测试之前开始清洁。

来自文档before(: all)

before(:all)块在组中的所有示例之前运行一次


0
投票

应该在每个场景之前清理数据库,因为Cucumber打算这样做。阻止黄瓜这样做是一种错误的优化,一种常见的反模式,随后是许多经验较少的黄瓜用户。情景永远不应该相互依赖。

要使其工作,请删除已添加到应用程序的任何代码,以限制黄瓜清理数据库的方式。

如果您不确定如何操作,请使用您正在使用的相同ruby和rails版本创建一个新的rails项目,然后添加cucumber-rails gem。它将按预期设置一切。您可以使用之前/之后的diff-rails进行比较。


0
投票

您可以使用以下代码在每个方案之前(而不是之后)清理数据库。只需将其添加到您的Rspec Docs

features/support/env.rb

0
投票

只是一个解决方法/黑客,以防你还没有找到解决方案。这里的诀窍是使用标记黄瓜钩!

在特征文件中的最后一个场景中提供@LastScenario等标记。然后使用黄瓜的@After钩子执行操作,比如在你的情况下清理数据。类似于:@LastScenario场景:我的场景名称鉴于我有一些东西......

然后在Hooks.java类中:

Cucumber::Rails::Database.autorun_database_cleaner = false
DatabaseCleaner.strategy = :truncation
Cucumber::Rails::Database.javascript_strategy = :truncation

Before do
  DatabaseCleaner.clean
end

同样可以使用@Before Hook完成 - 基于所需要的。

© www.soinside.com 2019 - 2024. All rights reserved.