我使用FactoryGirl和Rspec作为我的测试框架。我有一个模型,它有validates_presence_of验证。基本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
编辑: 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: 包含上面的代码。根据使用宝石的建议,在控制器底部定义了疾病_params。
谢谢!
显示动作 – apneadiving 2013-03-26 20:08:43
您在哪里定义'disease_params'? – apneadiving 2013-03-26 20:31:23
似乎在这里失败'params.require(:疾病)',但我不知道为什么 – apneadiving 2013-03-26 21:08:45