我正在为我的测试框架使用 FactoryGirl 和 Rspec。我有一个模型,上面有 validates_presence_of 验证。基本的 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
编辑:
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)
似乎不包含任何内容。我通过将 cURL 帖子提交到带有空数据的正确 URL 收到了我之前发布的错误消息(这是 rspect 帖子应该做的),但我不知道如何获取 Rspec 从那里收到的信息发表声明。
问题 #2:我如何正确测试应该发生的响应 - 它收到一条错误消息,指出缺少必需的参数?
编辑:所以我的控制器似乎表明它应该呈现一种新的疾病,但测试失败。如果我尝试在网站上提交缺少所需参数的疾病,那么它会发出一个快速通知,上面写着“名称不能为空”。我不确定如何在 rspec 中进行测试。
编辑#2:包括上面的代码。strong_parameters
disease_params 根据使用gem的建议在控制器底部定义。
谢谢!