簡體   English   中英

如何在Rails測試中存根設置對象屬性的方法?

[英]How to stub a method that sets an object attribute in a Rails test?

我正在構建一個名為temp_coverage的Struct的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:未定義的方法'req_subscriber_election_amount ='for <結構發薪日= 12>

如何在規范中對結構的屬性設置進行存根處理?

您正在尋找這樣的東西嗎?

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

我找到了一種使用命名的Struct的方法。 因此,一旦我命名了Struct:

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

然后,我可以執行以下操作:

Struct::CoverageClass.any_instance.stubs(:req_subscriber_election_amount).returns(25)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM