1

だから私の状況は次のとおりです:私はそのような同じ構造を持つ2つのモジュールを持っています:

module Module1
  class Config

    def fee_rate
      2
    end
  end
end

たとえば、Module2 には、値が異なるだけで、fee_rate メソッドを持つクラス Config があります (これらは実際には Rails エンジンに実装されていますが、問題にはなりません)。

次に、私のモデルは Module1 または Module2 のいずれかを使用して、次のような手数料率の値を取得できます。

def config
  @config ||= "#{module_name.titleize}::Config".constantize.new
  @config
end

def get_value
  config.get_fee * some_other_value
end

私がテストしようとしているのは、 get_fee 関数が正しいクラスで呼び出されたかどうかです:

"#{model.module_name.titleize}::Config".constantize.any_instance.expects(:get_fee).at_least_once
model.get_value

そして、get_value を呼び出す行で、次のエラーが発生します - nil:NilClass の未定義メソッド `*'。私は今完全に迷っているので、助けやアイデアをいただければ幸いです。

4

1 に答える 1

2

期待値を設定することによりget_fee、実際のメソッド呼び出しが発生するのを防ぎます。期待値の戻り値を設定していないため、たとえばexpects(:get_fee).at_least_once.returns(3)nilを返しているため、エラーメッセージが表示されます。

期待を完全に排除し、適切なタイプの構成クラスが作成されていることを確認することで、より多くの成功を収めることができます。

model.get_value
assert_equal "#{model.module_name.titleize}::Config".constantize, 
             model.config.class
于 2012-11-09T23:05:17.690 に答える