2017-05-04 9 views
0

私はこのように、構造体はtemp_coverageと呼ばれたRailsのスペックテストを構築しています:Railsテストでオブジェクト属性を設定するメソッドをスタブする方法はありますか?

temp_coverage = Struct.new(:paydays) do 
    def calculate_costs 
     50 
    end 
    end 

そして、私の仕様で、私はtemp_coverageを使用してメソッドを呼び出すが、私は、コードので、エラーを取得しています私は、次のことをやっているテストしてい:

temp_coverage.req_subscriber_election_amount = subscriber_election_amount 

そして、私はエラーを取得しています:

NoMethodError: undefined method `req_subscriber_election_amount=' for < struct paydays=12 >

私は構造体に属性の設定をスタブアウトするにはどうすればよいです私の仕様?

答えて

1

これはあなたの探している質問ですか?

temp_coverage = double('temp_coverage', paydays: nil) 

allow(temp_coverage).to receive(:calculate_costs).and_return(50) 
allow(temp_coverage).to receive(:req_subscriber_election_amount=) do |argument| 
    temp_coverage.instance_variable_set(:@req_subscriber_election_amount, argument) 
end 

# Example: 
temp_coverage.req_subscriber_election_amount = 123 
puts temp_coverage.instance_variable_get(:@req_subscriber_election_amount) 
# => 123 
puts temp_coverage.paydays 
# => nil 
puts temp_coverage.calculate_costs 
# => 50 
+0

感謝ジェイ-Arが、それは私が達成したいと思いますが、私はスペックを実行したときに、私は」まさにです未定義のメソッド 'allow'を取得しています。それは新しいrspecコマンドですか? –

+0

ああ、私はあなたが古いrspecを使用していると思います。あなたのrspecバージョンは> = 3ですか? [古いRSpecリファレンス](https://www.relishapp.com/rspec/rspec-mocks/v/2-99/docs/) –

+0

rspecではなくmochaモックを使用しているようです。 –

0

名前付き構造体を使用してこれを行う方法が見つかりました。だから、かつて私は、私の構造体の名前:

temp_coverage = Struct.new('CoverageClass', :paydays) do 
    def calculate_costs 
     50 
    end 
    end 

をIでしその後、次の操作を行います。

Struct::CoverageClass.any_instance.stubs(:req_subscriber_election_amount).returns(25) 
関連する問題