我有一個用戶模式:兩個類似RSpec的測試,給出了相反的結果
class User < ActiveRecord::Base
attr_accessible :email, :name
# admin only
attr_accessible :email, :name, :admin, :as => :admin
而下面的模型規格:
describe "accessible attributes" do
let(:new_user){ FactoryGirl.create(:user) }
@admin_attrs = { admin: true, name: "ben", email: "[email protected]"}
it "can not be set on create" do
# variant 1 - test fails, AM::MAS::Error NOT thrown
expect do
User.new(@admin_attrs)
end.should raise_error(ActiveModel::MassAssignmentSecurity::Error)
# variant 2 - test passes, AM::MAS::Error NOT thrown
expect do
User.new(admin: true, name: "ben", email: "[email protected]", password: "123xyz", password_confirmation: "123xyz")
end.should raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
我想不通,爲什麼我的測試的變體1失敗,但變種2通過。我得到的錯誤信息是:
1) User accessible attributes can not be set on create
Failure/Error: expect do
expected ActiveModel::MassAssignmentSecurity::Error but nothing was raised
他們基本上是一樣的測試。我究竟做錯了什麼?事實上,如果我從控制檯執行測試1,它會按預期拋出MAS :: Error。我很困惑。
爲什麼你寫的'讓(:new_user){FactoryGirl .create(:user)}'並且從不使用'new_user'方法?如果你需要一個管理員,你可以在'FactoryGirl.create'中傳遞'admin:true',甚至通過擴展'user'的工廠爲管理員創建單獨的工廠(參見文檔https://github.com中的'parent'鍵/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#inheritance)。 – jdoe
@jdoe,謝謝,我確實在其他地方使用'new_user'對象,感謝鏈接 – stephenmurdoch