2016-04-06 7 views
1

は、私はこのように呼び出されるメソッドを持っています。私がテストで気にしているのは、app_contextです。私はこのような何かをしようとしたが、それは動作しません:rspecの引数とキーワードの引数を組み合わせて、そのメソッドが呼び出される方法をテストするには?</p> <pre><code>post_signup(user, "fb signup completed", app_context: current_app_id, description: "Automatically Populated Via #{current_app_id}") </code></pre> <p>引数は値とキーワード引数のミックスです:

it "should log an event with an app_context" do 
     expect(controller).to receive(:post_signup).with(hash_including(app_context: current_app_id)) 

     subject 
     end 

it "should log an event with an app_context" do 
     expect(controller).to receive(:post_signup).with(current_app_id, any_args) 

     subject 
     end 

男は何ができますか?

+0

が良い絶望しないでください:だから作業expectあなたのようなものが必要だろう作る

市民、 'hash_including'の魔法はあなたを救うでしょう! http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ArgumentMatchers#hash_including-instance_method –

+1

あなたが実際にそれを試したことに気付く...:D しかし、それは最初の引数として試したようです。 ..ハッシュは2番目の引数なので、 'expect(controller).to receive(:post_signup).with(anything、hash_including(app_context:current_app_id))'のように 'anything '引数(これは 'user'です)とhash_includingが残りの部分(ハッシュ...)に使用されます。 –

+1

これを@TarynEast – Jwan622

答えて

2

良い市民を残してはいけませんが、hash_includingの魔法はあなたを救うでしょう!

最初の引数として試したようですが、ハッシュは実際にはpost_signupメソッドの2番目の引数です。最初の引数はuserです。そう何がuserと一致し、hash_includingはそれの残りの部分に使用されている

expect(controller).to receive(:post_signup).with(anything, hash_including(app_context: current_app_id)) 

...

+0

と答えてください。これはもっと重要なことですが、これは脆弱なテストの兆候でしょうか?それ自身の利益のためにあまりにも具体的なものはありますか?メソッド呼び出しで引数の場所をテストするのはどうでしょうか? – Jwan622

+1

私はそうは考えていません...あなたはすべてハッシュにして ':user => user'を使うことができます。それからただ一つの引数があります:D –

関連する問題