В строке 23 factory.rb у вас есть
(User.find_by_fname('fname1')).id
Это жестко запрограммировано, чтобы найти fname1
.Однако ваша фабрика использует последовательность для определения fname:
f.sequence(:fname) { |n| "fname#{n}" }
Это означает, что во второй спецификации значение для fname будет fname2, а не fname1.Это происходит потому, что последовательности не сбрасываются между различными спецификациями.
Все это означает, что когда вы вызываете User.find_by_fname, он не может найти пользователя с fname1 (только fname2), поэтому он возвращает nil, чтоВот почему вы получаете вызываемый идентификатор для ошибки nil.
- Правка -
Делаете ли вы что-нибудь с атрибутом пользователя, который вы передаете фабрике разрешений (например, с Factory.create(:permission, :user => @user)
)?Если нет, я бы изменил его на что-то вроде
Factory.create(:permission, :creator => @user)
Примечание: если у вас нет настройки Permission # creator в качестве ассоциации с пользователем, вам нужно будет сделать
Factory.create(:permission, :creator_id => @user.id)
В том же духе вы можете определить свою фабрику более точно в соответствии с
Factory.define :permission do |f|
f.role_id 1
f.association :group, :factory => :group
f.association :creator, :factory => :user
end
Если ваши ассоциации настроены правильно, вам не нужно беспокоиться об идентификаторах, ассоциация правильноВещь для тебя.