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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何清理黄瓜栏中不同功能之间的数据库?相关的知识,希望对你有一定的参考价值。

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

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

答案

我使用DatabaseCleaner qazxsw poi我很满意

https://github.com/DatabaseCleaner/database_cleaner

在rails_helper.rb中

另一答案

这是示例配置

  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)块在组中的所有示例之前运行一次

另一答案

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

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

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

另一答案

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

features/support/env.rb
另一答案

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

在特征文件中的最后一个场景中提供@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完成 - 基于所需要的。

以上是关于如何清理黄瓜栏中不同功能之间的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

执行多个黄瓜特征文件

如何摆脱Android应用栏中的后退按钮

从片段创建子意图

如何将Excel文件转换为黄瓜数据表

使用与黄瓜集成的柑橘框架的并行集成测试执行

如何将片段目标绑定到底部导航栏中的菜单项?