10

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

如果我通过rake db:fixtures:load RAILS_ENV=test单元测试手动加载固定装置,但 rake 会清除测试数据库。

我的 test_helper 包括fixtures :all并且我的测试是从它继承的——但夹具根本没有加载。

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

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

4

5 回答 5

6

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

我的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
于 2009-10-10T14:52:38.013 回答
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

于 2009-10-21T03:51:27.300 回答
4

我终于找到了问题,尽管解决方案有点老套。

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

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

hacky 的解决方案是:将所需的数据直接放入模式中,而不是放入固定装置中,因为它加载到较晚。

我会寻找一个更方便的解决方案,如果我找到了,我会更新这个答案。

于 2009-10-12T08:52:34.980 回答
1

我的问题是忘记将“require 'test_helper'”放在首位。例如。

require 'test_helper'

class AdminUserTest < ActiveSupport::TestCase
  # test "the truth" do
  #   assert true
  # end
end
于 2018-01-03T08:59:00.317 回答
0

我有同样的问题。或者更确切地说,问题在于我的固定装置与数据库模式不是最新的。Rails 没有抛出异常,而是将测试数据库用作后备解决方案。最不确定的。

于 2010-09-28T10:41:35.837 回答