【问题标题】:Rspec tests failing if run all together如果一起运行,Rspec 测试失败
【发布时间】:2017-10-09 17:35:45
【问题描述】:

我有 2 个 _spec 文件:第一个包含单元测试,另一个包含一些集成测试。

通过指定文件名运行它们时,它们都是绿色的,而作为“rspec”运行它们时,它们中的 3 个都失败了。

我正在使用 database_cleaner gem 来清理每个测试周围的测试数据库。

config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

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

我使用“let”实例化对象,使用 FactoryGirl 创建示例对象。

有没有人经历过这样的事情?

【问题讨论】:

  • 在我看来,这听起来像是在测试之间没有正确重置数据库 - 您可能可以根据确切的故障来验证这种情况(即,如果您正在检查集合大小并且有多余的元素)。这也可能是测试之间的合理冲突 - 这取决于失败是什么,以及失败是否与顺序有关。
  • @oowowaee 我已经通过从 def 移动到 let 实例化对象来修复。现在按预期工作,DatabaseCleaner 也是如此

标签: ruby-on-rails unit-testing testing rspec integration-testing


【解决方案1】:

一些问题可能是:

  • 您正在修改而不是在测试之间重置的类变量。类变量是反模式,通常应避免使用。
  • 您没有正确地存根诸如常量之类的东西。

在测试之间保持状态的任何事情都可能导致您看到的问题。在每次测试期间使用调试器检查对象的状态。

【讨论】:

    【解决方案2】:

    我通过从 def 转到 let 解决了我的问题。注意定义

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多