我真的很苦惱與Rspec DSL!我在互聯網上閱讀了很多,所以我發佈了我的特殊問題,因爲我的軟弱頭腦無法獲得解決方案。控制器規格拋出未定義的方法
在我的控制器中有一個post方法來更新用戶的電子郵件。工作正常,但我正在努力與規範,因爲我所得到的是NilClass的未定義方法(即使我已經試圖存儲每個對象和方法等)。
users_controller.rb
def update_user_email
@user = User.find_by_id(params[:id])
new_email = params[:user][:new_email].downcase.strip
user_check = User.find_by_email('new_email')
if user_check.blank?
@user.email = new_email
@user.save
flash[:notice] = "Email updated to #{new_email}"
else
flash[:alert] = "This email is already being used by someone else!"
end
respond_with @user do |format|
format.html { redirect_to admin_user_path(@user) }
format.json { head :no_content }
end
end
這是我想寫的規範。我應該寫什麼測試,如果不是這樣,我該怎麼做才能防止對NilClass錯誤的未定義方法!
users_controller_spec.rb
describe Admin::UsersController do
let!(:user) { FactoryGirl.create(:user, password: 'oldpass', email: '[email protected]') }
...
describe "admin actions for each user" do
it "resets user email" do
post :update_user_email, {user: {new_email: '[email protected]'} }
response.status.should == 200
end
end
...
end
和錯誤:
Admin::UsersController admin actions for each user resets user email
Failure/Error: post :update_user_email, {user: {new_email: '[email protected]'} }
NoMethodError:
undefined method `email=' for nil:NilClass