1

(ジェネレーターの実行後)使用されているアプリで定数を持つgemを作成していますが、その定数はgem自体には存在しません。定数を呼び出しているコードの部分をスキップしない、gem 内の RSpec に問題があります。何が起こっているかの簡単な例を以下に示します。

class Foo
  def self.do_something
    Bar.send(FakeConstant.name)  #Bar.send is a valid class and method
  end
end

foo_spec.rb

it 'does something'
  expect(Bar).to receive(send).and_return('skipped!')
  Foo.do_something
end

rspec 出力

NameError: uninitialized constant FakeConstant

Bar.send呼び出しを完全にスキップして、その中に悪い定数があることを決して知らないようにテストを書きたいと思います。これを回避する良い方法は本当にありません。

4

1 に答える 1

2

RSpec のstub_constメソッドを使用すると、定数をスタブ化できます。

it 'does something'
  stub_const(FakeConstant, double(name: "Fakey McFakerson"))
  expect(Bar).to receive(send).and_return('skipped!')
  Foo.do_something
end

詳細はこちら: https://www.relishapp.com/rspec/rspec-mocks/docs/mutating-constants/stub-defined-constant

とは言うものの、私は BroiSatse に同意します。その情報をコードに取り込むためのより動的な手段を提供する方がおそらくより良いだろうということです。

于 2016-03-17T01:14:02.220 に答える