我正在使用FactoryGirl和Rspec作为我的测试框架。我有一个模型,其中包含一个验证是否存在的验证。基本的Rspec框架包括一个测试:
describe "with invalid params" do
it "assigns a newly created but unsaved disease as @disease" do
# Trigger the behavior that occurs when invalid params are submitted
Disease.any_instance.stub(:save).and_return(false)
post :create, :disease => {}
assigns(:disease).should be_a_new(Disease)
end
end
Edit:
diseases_controller.rb
# POST /diseases
# POST /diseases.xml
def create
@disease = Disease.new(disease_params)
respond_to do |format|
if @disease.save
format.html { redirect_to(@disease, :notice => 'Disease was successfully created.') }
format.xml { render :xml => @disease, :status => :created, :location => @disease }
else
format.html { render :action => "new" }
format.xml { render :xml => @disease.errors, :status => :unprocessable_entity }
end
end
end
private
def disease_params
params.require(:disease).permit(:name, :omim_id, :description)
end
这个测试与我的应用程序工作方式不符。它不会在发生错误的提交时返回一个新的疾病,而是返回一个错误:
Required parameter missing: disease
问题1:我不知道如何查看Rspec返回的内容。在这种情况下,response
对象似乎没有被创建?打印assigns(:disease)
似乎没有包含任何内容。我通过向正确的URL提交空数据(这是rspect post应该做的),得到了我之前发布的错误消息,但我不知道如何获取Rspec从post语句接收的信息。
问题2:我该如何正确地测试应该发生的响应——它会收到一个错误消息,说缺少一个必需的参数?
编辑:所以我的控制器似乎表明它应该呈现一个新的疾病,但测试失败了。如果我尝试在网站上提交一个缺少所需参数的疾病,那么它会出现一个闪存通知,说“名称不能为空”。我不确定如何在rspec中测试它。
编辑#2:包括上面的代码。disease_params在控制器底部定义,符合使用strong_parameters
gem的建议。
谢谢!
disease_params
? - apneadivingparams.require(:disease)
,但我不知道原因。 - apneadivingParameters: {"disease"=>{"name"=>"Disease 4", "omim_id"=>nil, "description"=>nil}}
。 - Denise Mauldinpost:create,:disease => {:name =>''}
,那么测试就会成功...但我不确定为什么。 ''仍然不应该通过validates_presence_of测试,对吧? - Denise Mauldinsave
吗? - Denise Mauldin