Rspec FactoryGirl未初始化常量InvalidVoice
当我遇到这个错误时,我正在努力学习RSpec和FactoryGirlRspec FactoryGirl未初始化常量InvalidVoice,rspec,factory-bot,Rspec,Factory Bot,当我遇到这个错误时,我正在努力学习RSpec和FactoryGirl Failure/Error: post :create, voice: FactoryGirl.attributes_for(:invalid_voice) NameError: uninitialized constant InvalidVoice 下面是语音控制器上的一个简单RSpec describe '#create' do context "with valid input
Failure/Error: post :create, voice: FactoryGirl.attributes_for(:invalid_voice)
NameError:
uninitialized constant InvalidVoice
下面是语音控制器上的一个简单RSpec
describe '#create' do
context "with valid inputs" do
it "creates and increase Voice count by 1" do
expect{
post :create, voice: FactoryGirl.attributes_for(:voice)
}.to change(Voice, :count).by(1)
end
it "redirects to show page" do
post :create, voice: FactoryGirl.attributes_for(:voice)
expect(response).to redirect_to Voice.last
end
end
context "with invalid inputs" do
it "does not increase Voice count" do
expect{
post :create, voice: FactoryGirl.attributes_for(:invalid_voice)
}.not_to change(Voice, :count)
end
it 'renders #new again' do
post :create, voice: FactoryGirl.attributes_for(:invalid_voice)
expect(response).to render_template :new
end
end
end
现在,所有带有有效输入的上下文都将通过。然而,在具有无效输入的上下文中,FG似乎没有将:invalid_voice注册为有效输入
这是我的前景
FactoryGirl.define do
factory :voice do
title "MyString"
opinion "MyText"
end
factory :invalid_voice do
title ""
opinion ""
end
end
对于这个项目,无效输入仅仅意味着空输入。因此,如果title或opinion为空,则它是无效的,应该返回一个错误/重定向到new方法
我尝试将“”设置为nil并完全删除其中一个属性,但错误仍然存在
我做错了什么
编辑:
看来下面的方法是有效的。有人能告诉我为什么吗
factory :invalid_voice, parent: :voice do
title nil
end
这是因为,当您将语音
定义为无效语音
的父项时,这意味着无效语音
继承自语音
,是一种语音
如果没有此选项,它将无法工作,并出现以下错误:
NameError:
uninitialized constant InvalidVoice
因为,您的代码中没有任何名为InvalidVoice
的类。但是,您只有语音
类
您可以使用继承
为同一类创建多个工厂。并且,您正在为一个类创建两个工厂:voice
和:invalid_voice
这就是您要做的:
factory:invalid_voice,parent::voice
指定voice
是invalid_voice
工厂的关联类,它的工作原理是,您的代码中已经存在一个voice
类。我在回答中解释了原因。请看一看,如果你有任何其他问题,请告诉我。我明白了,所以似乎所有的工厂都必须与模型相关。谢谢
NameError:
uninitialized constant InvalidVoice