5

我正在尝试创建一个双重但我不断收到此错误:

 undefined method `double' for #<Class:0x007fa48c234320> (NoMethodError)

我怀疑这个问题与我的规范助手有关,所以我在下面添加了我的规范助手:

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
$LOAD_PATH.unshift(File.dirname(__FILE__))

require 'rspec'
require 'webmock/rspec'
include WebMock::API
include WebMock::Matchers

Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }

RSpec.configure do |config|
end
4

2 回答 2

14

double存在于示例(和before块等)中,但听起来您正试图在这些上下文之一之外调用它。

所以例如

describe Thing do
  thing = double()
  it 'should go bong'
  end
end

不正确但是

describe Thing do
  before(:each) do
    @thing = double()
  end

  it 'should go bong' do
    other_thing = double()
  end
end

很好

于 2012-06-25T20:29:59.243 回答
9

您还可以double通过要求独立文件在 RSpec 之外使用 RSpec。

require "rspec/mocks/standalone"

greeter = double("greeter")
allow(greeter).to receive(:say_hi) { "Hello!" }
puts greeter.say_hi

来自文档:https ://relishapp.com/rspec/rspec-mocks/v/3-2/docs/outside-rspec/standalone

于 2015-03-28T17:21:23.500 回答