私は注文書を処理し、支払いを設定してからモデルの関連付けを設定する、サービスと呼ばれるサービスオブジェクトを作成しました。Rspecによるサービスのテストとモック
このクラスは、initialize
とpay
という2つのメソッドを持つトランザクションと呼ばれます。 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がそこに新しいモデルと関連を作成するとき、どうすれば私のTransaction.payをテストできますか?
上記のようにすべてをモックする必要がありますか?それとももっと良い方法がありますか?
私はFactoryGirlを使用していますが、account
モデルではDeviseを使用しているため、使用できません。 Deviseテストヘルパーはコントローラの外では使用できません。サービスでテストしているので動作しません。
FactoryGirlとDeviseは問題ではありません。サービステストはモデルテストと同様でなければなりません。モデルにFactoryGirlを使用できるはずですね。 – phoet