2016-09-01 2 views
2

私はActiveRecordオブジェクトUserを持っています。私は宝石の上にシングルサインを使用しているアプリケーションでは、私はいくつかのユーザーデータを私たちのdatabseに保存する必要があります。私のApplicationControllerには、このコードを持っていますRSpecで新しいActiveRecordオブジェクトの作成呼び出しを模擬する方法は?

def create_user 
    User.create(name: current_user['name'], email: current_user['email'], company_id: current_user['id']) 
end 

私は実際create呼び出しを皮肉っRSpecのテストを必要としています。私は試しました

allow_any_instance_of(User).to receive(:create).with(any_args).and_return(user) 

"ユーザーは作成を実装していません"というエラーを返します。

答えて

2

jvillianはcreateUserで実装されていて、Userのインスタンスではありません。簡単な修正だけで(すなわちallow代わりallow_any_instance_ofの使用)Userに直接メソッドをスタブにしている:

allow(User).to receive(:create).with(any_args).and_return(user) 

また、.with(any_args)は何もしませんので、これは同等です:このソリューション

allow(User).to receive(:create).and_return(user) 
+0

働いて、ありがとう! –

+0

いいです!私がやったよりもいくつかのステップを進んでくれてありがとう – jvillian

2

私はallow_any_instance_ofcreateを実装するためにインスタンスUserを期待していることを考えています。しかし、createは、クラスメソッドです。だから、私は、エラーメッセージUsercreateを実装していないと言っていると信じています。

class_doubleがご使用のケースで機能するかどうかを確認することをおすすめします。 Myron Marstonの投稿Rspec Mocksthisをチェックしてください。

関連する問題