簡體   English   中英

需要其他方法返回的Rspec測試實例方法(存根?)

[英]Rspec testing instance method which require other methods return (stubbing?)

我希望測試那些已經存在的方法,但是我嘗試的一切似乎都不符合最佳實踐,也沒有用。

可能有人可以支持我嗎?

代碼待測試

def any_subset_greater?
  divisors_sums.any?{|sum| sum > @value}
end

def no_subset_equal?
  !divisors_sums.any?{|sum| sum == @value}
end

def check_room
  any_subset_greater? && no_subset_equal?
end

RSPEC嘗試

首先指定似乎沒有為除數方法和實例變量@value設置適當的返回值。

describe "#any_subset_greater?" do
  # Examples:
  # [1,2] > 4   #=> false
  # [1,2,3] > 4 #=> true
  specify "returns true, when value in the array is greater" do
    number.stub(:divisors){[1,2,3]}
    number.stub(:value) {4}
    expect(number.any_subset_greater?).to be_true
  end

end

describe "#no_subset_equal?" do
  # Examples:
  # 4 === [1,2,4]   #=> false
  # 4 === [1,2,3]   #=> false
  # 4 === [1,2,6]   #=> true
end

describe "#check_room" do
  # testing condition from methods above
end

不知道如何設置對象,此答案只是一個猜測。 我將假設您的對象看起來像:

class SpecialNumber
  attr_reader :divisor_sums

  def initialize(n)
    @value = n
    # @divisor_sums is calculated here
  end

  # rest of your methods
end

因此,考慮到此對象,第一組測試可能類似於:

subject(:special_number) { SpecialNumber.new 4 }

describe "#any_subset_greater?" do
  context "no divisor sums greater than value" do
    it do
      special_number.stub(:divisor_sums).and_return [1, 2]

      expect(special_number.any_subset_greater?).to be_false
    end
  end

  context "one divisor sum greater than value" do
    it do
      special_number.stub(:divisor_sums).and_return [1, 2, 5]

      expect(special_number.any_subset_greater?).to be_true
    end
  end

  context "several divisor sums greater than value" do
    it do
      special_number.stub(:divisor_sums).and_return [1, 2, 5, 6]

      expect(special_number.any_subset_greater?).to be_true
    end
  end
end

但是您不必將其存根。 如果這是一個簡單的類,則每次都只需創建一個新的對象,該對象具有預期的除數即可:

describe "#any_subset_greater?" do
  context "no divisor sums greater than value" do
    it do
      expect(SpecialNumber.new(3).any_subset_greater?).to be_false
    end
  end
end

暫無
暫無

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

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