LoginSignup
0
0

More than 5 years have passed since last update.

rspecで無名モジュールを作ったテストで定数を指定するには

Posted at

結論

stub_constが使えないので、Module#const_setを使いましょう

詳細

let(:unit) do
  Module.new do
    def self.name do
      'TestUnit'
    end
  end
end

before { stub_const("#{unit.name}::FOO", 1) }
it { ... }

とかやろうとしてたんです。
(Module#nameは、通常名前が必要になった時に決定されるので、最初に定義が必要)

ところが、これをやると

RuntimeError:
undefined TestUnit::FOO

と言われてしまうわけです。

@r7kamura さんに相談した所、stub_constが実行されるときには、TestUnitがあることを前提に定義しようとするため、この場合は見つからないと言われてしまうようです。
(ちなみに、 let!(:unit)で定義しても同様でした…。)

なので、このようにしました。

let(:unit) do
  Module.new
end

before { unit.const_set("FOO", 1) }
it { ... }
1 examples, 0 failures

YATTA!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0