对于具有ActiveRecord / SQLite3错误的MongoDB,Rails功能测试失败

时间:2013-06-30 17:11:26

标签: ruby-on-rails sqlite mongodb activerecord mongoid

我正在使用带有Rails的Mongoid,但所有已生成的功能测试都失败了,错误类似于:

test_should_get_new(PostsControllerTest):
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: comments: DELETE FROM "comments"

这些是生成的测试:

require 'test_helper'

class PostsControllerTest < ActionController::TestCase
  setup do
    @post = posts(:one)
  end

  test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:posts)
  end

  test "should get new" do
    get :new
    assert_response :success
  end

  [...]
end

我应该改变测试吗?或删除一些ActiveRecord或Sqlite的引用? (我的gemfile中仍然有sqlite,因为我有删除它的问题,我仍然不确定如何从应用程序中完全删除它,因为我没有用它做任何事情)

2 个答案:

答案 0 :(得分:1)

config/application.rb中,移除require "rails/all"并添加

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"
require "sprockets/railtie"

config/development.rb评论/删除以下内容:

config.active_record.mass_assignment_sanitizer = :strict
config.active_record.auto_explain_threshold_in_seconds = 0.5

config/test.rb评论/删除以下内容:

config.active_record.mass_assignment_sanitizer = :strict

如果它不起作用,你能告诉我你的spec_helper.rb吗?

答案 1 :(得分:0)

如果您输入

rails --help

然后列出跳过活动记录的选项

-O, [--skip-active-record]     # Skip Active Record files

我建议您使用此选项创建一个新的Rails项目,以删除Active Record的所有痕迹,包括Pierre-Louis提到的所有部分,以及其他类似测试夹具,然后重新创建/重新导入您的模型和测试代码。