注文を処理し、支払いを設定し、モデルの関連付けを設定する Transaction というサービス オブジェクトを作成しました。
このクラスは、2 つのメソッドを持つ Transaction と呼ばれ、initialize
とpay
. でテストしていますspec/services/
( にありapp/services
ます)。
このinitialize
メソッドはaccount
、注文を処理するためにユーザーから渡された およびいくつかのパラメーターを受け取ります。
pay
rspecでテストしようとしています。そのようなテストを実際に行うにはどうすればよいですか?この機能には多くのことが行われています。たとえば、新しいモデルを作成し、それらの間にいくつかの関連付けを設定します。
account
これまでのところ、次のように double を作成しました 。
@account = double("account", :confirmed => true, :confirmed? => true)
ただし、Transaction Pay メソッドで使用される関数 (および関連付け) は多数あります。たとえば、これらの関連付けが呼び出されると (Transaction.pay
テストで呼び出すと)、エラーが返されます。
ActiveRecord::AssociationTypeMismatch:
Business(#70250016824700) expected, got RSpec::Mocks:.
business
モデルは と同じ double で、account
属性として に追加されます@account
。そこに新しいモデルと関連付けを作成するときに、Transaction.pay をテストするにはどうすればよいですか?
上記のように、それらすべてをモックする必要がありますか? または、それを行うより良い方法はありますか?
FactoryGirlを使っていますが、account
モデルがDeviseを使っているので使えません。Devise テスト ヘルパーはコントローラーの外では使用できません。また、サービスでテストしているため、機能しません。