Я создал объект службы, называемый транзакцией, который обрабатывает сделанный заказ, устанавливает платежи и затем устанавливает ассоциацию модели.Тестирование и издевательства с Rspec
Класс называется транзакцией двумя способами: initialize
и pay
. Я тестирую его в spec/services/
(он находится в app/services
).
Метод initialize
принимает account
и некоторые параметры, переданные пользователем для обработки заказа.
Я пытаюсь проверить pay
с rspec. Как я действительно делаю такой тест? Эта функция много продолжается. Например, он создает новые модели, а затем устанавливает некоторые ассоциации между ними.
До сих пор я создал двойной account
следующим образом:
@account = double("account", :confirmed => true, :confirmed? => true)
Однако, есть много функций (и ассоциации), используемых в способе транзакции оплаты. Так, например, когда эти ассоциации называются (как только я называю Transaction.pay
в тесте), он возвращает ошибку:
ActiveRecord::AssociationTypeMismatch:
Business(#70250016824700) expected, got RSpec::Mocks:.
business
модель двойной так же, как account
, и добавляется в качестве атрибута @account
. Как я могу проверить свой Transaction.pay, когда он создает новые модели и ассоциации там?
Нужно ли издеваться над ними, как показано выше? Или есть лучший способ сделать это?
Я использую FactoryGirl, но я не могу использовать его, поскольку моя модель account
использует Devise. Разработчики тестовых помощников не могут использоваться вне контроллеров, и поскольку я тестирую службы, это не сработает.
FactoryGirl и Devise не должны быть проблемой. сервисные тесты должны быть похожи на тесты модели. вы должны иметь возможность использовать FactoryGirl для своих моделей, не так ли? – phoet