0
我正在嘗試控制器測試,並與此,嘲笑和存根。但是,我認爲我能得到後者,但是,在我的測試中沒有那麼自信,我不願意對目前我要解釋的失敗測試抱有信心。rspec中的stubbing控制器
RSpec.describe CorporateContactFormsController, :type => :controller do
let!(:contact_form){ FactoryGirl.create :corporate_contact_form }
let!(:params_new){ {corporate_contact_form: {}} }
describe "POST create" do
before do
CorporateContactForm.stub(:new).and_return(contact_form)
get :new, params_new
end
it "returns http success" do
expect(response).to be_success
end
end
describe "POST create" do
before do
CorporateContactForm.stub(:new).and_return(contact_form)
end
describe "where all is good" do
before do
contact_form.stub(:save).and_return(true)
post 'create', params_new
end
it "should set a flash notice" do
flash[:notice].should_not be_nil
end
it "should redirect to edit_details page" do
response.should redirect_to employees_path
end
end
end
end
所以,我在這裏測試處理表單提交的控制器。但這裏是我輸了...
def create
if corporate_contact_form_params.present?
@contact_form = CorporateContactForm.new(corporate_contact_form_params)
if @contact_form.save
if @contact_form.contact_type == CorporateContactForm::EMPLOYEE
redirect_to employees_path
else
redirect_to employers_path
end
flash[:notice] = 'Form submitted'
return
end
end
render new
end
private
def corporate_contact_form_params
params.require(:corporate_contact_form).permit(:firstname, :surname, :contact_number, :email, :company_name, :method_of_payment, :number_of_employees, :comments, :contact_type)
end
利用如上設置我的參數,我得到的失敗測試
Failure/Error: post 'create', params_new
ActionController::ParameterMissing:
param is missing or the value is empty: corporate_contact_form
我真的很努力明白是怎麼回事,爲什麼要這樣測試失敗,因爲它的工作在開發中。爲什麼第一個describe "POST create
測試通過,而不是下一個塊?
這太棒了,它工作。我不確定爲什麼,但我想通過只給空白的大括號,我顯示空白參數。爲什麼這個工作? – 2014-09-12 11:12:07
@FredBenfield - 解釋。 :) – BroiSatse 2014-09-12 11:38:03