invoice.rb:В спецификации, как я могу назначить объект атрибуту, определенному attr_accessor?
class Invoice < ActiveRecord::Base
attr_accessible :user_obj
attr_accessor :user_obj
after_create :create_activity
def create_activity
log = "<b> Invoice created. </b>" + '<br/>' + '<span class="meta"> ' + self.user_obj.name + ' on ' + Time.now.to_date.strftime('%d-%m') + "</span>"
@activity = ActivityLog.new(:invoice_id => self.id,:user_id => self.user_obj.id, :log => log)
@activity.save
end
end
invoice_spec.rb:
it "some case for create invoice" do
@obj = create(:invoice) # invoice data defined in factory file.
end
Ошибка после запуска спецификации:
undefined method `name' for nil:NilClass
# ./app/models/invoice.rb:869:in `create_activity'
# ./spec/models/invoice_spec.rb:246:in `block (3 levels) in <top (required)>'
Выше моя модель invoice.rb, которая содержит один attribute_accessor "user_obj" и содержит информацию о пользователе, я использовал его в методе «create_activity» как «self.user_obj.name» или «self.user_obj.id».
Моя проблема заключается в том, что когда я запускаю свой spec для создания счета-фактуры, он выдает ошибку для «user_obj», которая не определена. Так может ли кто-нибудь помочь мне разрешить это?
Я не вижу никакого кода, который устанавливает '# user_obj'. Если он находится на вашем заводе, добавьте его в вопрос. –
при создании новых данных я установил его как params [: invoice] [: user_obj] = current_user в моем методе контроллера. Поэтому мой вопрос заключается в том, как выполнить эту настройку в тесте модели rspec, чтобы я мог получить пользовательские данные. –