Rails单元测试不会加载灯具

xij*_*ijo 10 unit-testing ruby-on-rails fixtures

rake test:units 在我当前的应用程序中失败,因为缺少必需的灯具数据.

如果我通过rake db:fixtures:load RAILS_ENV=test单元手动加载夹具测试工作,但rake清除测试数据库.

我的test_helper包含fixtures :all并且我的测试继承自它 - 但是装置根本就没有加载.

我现在有点无能为力,真的需要一些帮助!

我已经尝试了很多,我认为它与这个项目中使用的一些环境设置或插件有关.有谁知道在哪里阅读有关为测试环境加载哪些文件?

Chr*_*ris 6

将调用放在fixtures :all测试类中,而不是超类(test_helper).我的猜测是超级类的初始化没有按照你期望的方式工作,而且fixtures :all没有被调用.也许尝试将调用放在test_helper的initialize方法中.

test/test_helper.rb看起来像这样:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end
Run Code Online (Sandbox Code Playgroud)


xij*_*ijo 5

我终于找到了问题所在,尽管解决方案有点hacky。

一个插件依赖于数据库中有一些数据,至少一行。所以发生的事情是:

  1. rake 加载数据库模式
  2. rake 尝试加载环境
  3. 环境包括插件
  4. 由于缺少至少一行,插件加载失败
  5. 没有加载任何装置

黑客解决方案是:将所需的数据直接放入架构中,而不是放入固定装置中,因为它加载得太晚了。

我将寻找一种更方便的解决方案,如果找到,我将更新此答案。

  • 插件不应该做这样的事情。最好的办法是修复插件并向他们发送 github 上的拉取请求。 (3认同)

小智 5

另一种方法是编写自己的自定义rake任务进行测试.

例如:


task :test_units do

  RAILS_ENV = 'test' # Force the environment to test

  puts "Recreate the test database"
  Rake::Task['db:test:prepare'].invoke

  puts "Seed the database with fixtures"
  Rake::Task['db:fixtures:load'].invoke

  puts "Executing Unit Tests"
  Rake::Task['test:units'].prerequisites.clear 
  Rake::Task['test:units'].invoke
end
Run Code Online (Sandbox Code Playgroud)