2016-07-18 3 views
0

イムは、次のテスト時に私が得る上記のエラーを解決するために苦労次のテストで:カントは、エラーを解決する:#<ダブル(匿名)>予期しないメッセージを受信:で[] =を(:rule_code、1):</p> <pre><code>def add_rule_code new_rule count = list[:multiple_item_rules].count + list[:total_price_rules].count + 1 new_rule[:rule_code] = count end </code></pre> <p>

it "adds a unique rule code" do 
    item_rule = double({rule_type: "item", item_code: 001, number_of_items: 2, new_item_price: 8.50}) 
    rules.add_rule_code item_rule 
    expect(rules.list[:multiple_item_rules][:rule_code]).to eq 1 
    end 

私は、次のエラーメッセージが出ます:

1) Promotional_Rules New rules adds a unique rule code 
    Failure/Error: new_rule[:rule_code] = count 
    #<Double (anonymous)> received unexpected message :[]= with (:rule_code, 1) 
    # ./lib/Promotional_Rules.rb:21:in `add_rule_code' 
    # ./spec/promotional_rules_spec.rb:27:in `block (3 levels) in <top (required)>' 

I必ずその簡単な修正をしかし、私はイチジクをカントグーグルリングなどにもかかわらずそれを忘れないでください。

おかげ

+0

エラーは特にどの行にも指していますか? –

+0

'new_rule'があなたの考えであることを確認してください。私の推測はそうではないということです –

+0

メソッドの最後の行 "new_rule [:rule_code] = count"テストの行から "rules.add_rule_code item_rule" –

答えて

3

あなたはnew_rule[:rule_code]を呼び出しているが、ダブルは:[]に応答しません。あなたはそれを動作させることができ

一つの方法は次のとおりです。

allow(new_rule).to receive(:[])

RSpec Mocks Method Stubsを参照してください。

なぜダブルを使用しているのかわかりません。私はあなたが工場を使いたいかもしれないと思う。

+0

こんにちは、返信ありがとう、私はちょうどそれといくつかの他の組み合わせを試みたが運がなかった。私はこれについてかなり新しく、工場や工場の女の子に精通していません。あなたはもう助言を貸せますか?おかげで –

+0

工場ガールのドキュメントは次のとおりです:https://github.com/rspec/rspec-mocks#method-stubs。しかし、あなたは本当に工場を必要としません。 'item_rule = ItemRule.new(...)'を実行できます。 –

+0

RSpecについてもっと知りたいと思うかもしれません。チュートリアルです:https://semaphoreci.com/community/tutorials/getting-started-with-rspec。私はあなたがいくつかのチュートリアルを経て、あなたのプロジェクトに戻ってくることをお勧めします。また、モデル仕様を書くことは学ぶのに最適な方法です。 –

関連する問題

 関連する問題