Пытаюсь разобраться в rspec и правильном тестировании, и мне трудно сделать следующее правильно.
Допустим, у нас есть три класса, например
Class User
belongs_to :company
has_and_belongs_to_many :roles
end
Class Company
has_many :users
end
Class Role
has_and_belongs_to_many :users
end
В классе User у меня есть обратный вызов before_create, который назначает пользователю роль «company_admin» по умолчанию, если пользователь первым связан с компанией.
def check_for_initial_company_admin_role
if self.company.users.count == 0
self.roles << Role.find_by_name("company_admin")
end
end
Как правильно проверить в спецификации моей модели, что пользователю назначается роль «company_admin», если он первый пользователь, связанный с компанией?
ОБНОВИТЬ рабочее решение
describe "#check_for_initial_company_admin_role" do
it "sets the first user created to be the administrator" do
Factory(:role)
user = Factory(:user)
user.roles.count.should be > 0
user.roles.should include Role.find_by_name("company_admin")
end
end
Factory.define :user do |f|
f.email { Factory.next(:email) }
f.password "secret"
f.password_confirmation "secret"
f.association :company
end
Factory.define :role do |f|
f.name "company_admin"
end
Factory.define :company do |f|
f.name "foobar"
f.vat_id "1234"
end
user.roles.count.should be > 0
26.10.2011user.roles.should include(...)
. В противном случае я бы использовал тот же подход, за исключением того, что я, вероятно, сначала написал бы спецификацию;) 26.10.2011users
в nilClass. 26.10.2011