我生成了以下脚手架(使用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控制台中创建新测试。任何想法如何解决这个问题?
答案 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)