Factory_girl和RSpec:未定义的方法`new'测试:模块

时间:2015-01-24 13:08:09

标签: ruby-on-rails rspec factory-bot

我生成了以下脚手架(使用Ruby 2.2.0,rails 4.1.8,postgres):

 rails g scaffold Test user:references text:references data:hstore

在我的test_spec.rb中:

require 'rails_helper'

RSpec.describe Test, :type => :model do
  describe 'User generates a test' do
    before do
      @text = create(:text, content: "Cats eat mice")
      @user = create(:user)
      @test = create(:test)
    end
...

当我运行rspec时,测试失败并显示以下消息:

Failure/Error: @test = create(:test)
 NoMethodError:
   undefined method `new' for Test:Module
 # ./spec/models/test_spec.rb:8:in `block (3 levels) in <top (required)>'

当我测试其他模型(用户,文本)时,一切正常,只有测试模型失败。在rspec文件中调用Test.create(...)也会失败。在rails控制台中创建新测试。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用默认配置,Rails定义模块常量Test,因此当FactoryGirl test.rb作为Test.new的一部分时,Ruby不会自动加载您的:test文件工厂。

您可以使用Test开关在没有-T基础结构的情况下安装Rails,在这种情况下,它不会定义Test模块,您应该没问题。

如果已经配置了Rails,您可以将以下内容放在rails_helper.rb文件中以删除Test常量,您也应该没问题:

Object.send(:remove_const, :Test)