RSpec:短桩内部出租
这可能吗 例如:RSpec:短桩内部出租,rspec,Rspec,这可能吗 例如: let(:codes) do [double.stub(:msg => 'foo'), double.stub(:msg => 'bar')] end expect(codes[0].msg).to eq('foo') expect(codes[1].msg).to eq('bar') 但它引发了以下错误: NoMethodError: undefined method `msg' for {:msg=>"foo"}:Hash 及 对于
let(:codes) do
[double.stub(:msg => 'foo'), double.stub(:msg => 'bar')]
end
expect(codes[0].msg).to eq('foo')
expect(codes[1].msg).to eq('bar')
但它引发了以下错误:
NoMethodError:
undefined method `msg' for {:msg=>"foo"}:Hash
及
对于鼠标
,返回[nil,nil]
有什么帮助吗?问题是,至少对于rspec3来说,
存根方法本身不会返回正在存根的双精度。在您的情况下,它返回传递给它的哈希,如下所示:
describe 'RSpecs double behavior' do
describe '#stub' do
it 'returns the hash passed into it' do
expect(double.stub(msg: foo)).to eq({msg: 'foo'})
end
end
end
这似乎与事实相反,但事实上,我认为这种行为是故意的
请参阅Myron Marston的答案,了解避免使用存根
,并且仅依赖双精度
的替代方法
另外,我认为在这些问题上,在示例中使用有效的RSpec语法是有帮助的。在本例中,您省略了所需的description
和it
方法
这似乎与RSpec 2.3文件相反
对不起,这里的2.3文档是错误的:(
RSpec 3.0文档对此没有提及,基于此讨论,我认为这种行为是故意的
这是故意的,因为存根
旨在支持流畅的界面(with
,和_return
,和_raise
,等等),所以它需要返回一个消息期望值。如果您想打开文档,我们欢迎一个PR来改进文档:)
无论如何,您可以将方法名/返回值的散列传递给double
,因此根本不需要使用stub
:
describe 'stack overflow question' do
let(:codes) do
[double(msg: 'foo'), double(msg: 'bar')]
end
it "let's you call stub within let" do
expect(codes[0].msg).to eq('foo')
expect(codes[1].msg).to eq('bar')
end
end
double
上的文档提到:
describe 'stack overflow question' do
let(:codes) do
[double(msg: 'foo'), double(msg: 'bar')]
end
it "let's you call stub within let" do
expect(codes[0].msg).to eq('foo')
expect(codes[1].msg).to eq('bar')
end
end