我使用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