久しぶりにRspecでテストを書いたらタイトルのエラーに遭遇した。
proxy周りなんて触ってないのになんで・・・?と思い調べたところ、とても初歩的なミスだった。
結論は以下の参考サイトに挙がっている通り。
#it
や#identify
ブロックの外で#stub
や#should_receive
を書いていたのが原因だった。
書いたテストはこんな感じ。
#describe
直下の#stub
がまずい。
describe MyClass1 do
before { @my_instance = MyClass1.new }
describe "#my_method" do
MyClass2.stub(:my_method).and_return(true)
expect(@my_instance.my_method).to be_true
end
end
実行するとこんなエラーが出る
$GEM_HOME/gems/rspec-mocks-2.14.4/lib/rspec/mocks.rb:26:in `proxy_for': undefined method `proxy_for' for nil:NilClass (NoMethodError)
from $GEM_HOME/gems/rspec-mocks-2.14.4/lib/rspec/mocks.rb:51:in `allow_message'
from $GEM_HOME/gems/rspec-mocks-2.14.4/lib/rspec/mocks/syntax.rb:19:in `stub_object'
from $GEM_HOME/gems/rspec-mocks-2.14.4/lib/rspec/mocks/syntax.rb:40:in `stub'
コードの良し悪しは別として、こんな感じに直せばOK
describe MyClass1 do
before { @my_instance = MyClass1.new }
describe "#my_method" do
it "should be success" do
MyClass2.stub(:my_method).and_return(true)
expect(@my_instance.my_method).to be_true
end
end
end