Chef::DataBag и RSpec имитируют неопределенный метод `recieve'

Я пытаюсь создать заглушку метода list для класса Chef::DataBag следующим образом:

$ cat spec/spec_helper.rb 
require "rspec"

RSpec.configure { |config|
  config.mock_framework = :rspec
  config.mock_with :rspec
}

$ cat spec/test_spec.rb 
require "spec_helper"
require "chef"

RSpec.describe "test" do
  describe "simple test" do
    it "mocks chef databag" do
      allow(Chef::DataBag).to recieve(:list).and_return {}
    end
  end
end

$ grep "rspec \|chef " Gemfile.lock | head -n 2
  gem "chef", "11.16.4"
  gem "rspec", "3.1.0"

при выполнении rspec я получаю следующую ошибку.

$ bundle exec rspec spec/test_spec.rb 
F

Failures:

  1) test simple test mocks chef databag
     Failure/Error: allow(Chef::DataBag).to recieve(:list).and_return {}
     NoMethodError:
       undefined method `recieve' for #<RSpec::ExampleGroups::Test::SimpleTest:0x000000049964f8>
     # ./spec/test_spec.rb:7:in `block (3 levels) in <top (required)>'

Finished in 0.00048 seconds (files took 0.53998 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/test_spec.rb:6 # test simple test mocks chef databag

вот как я убедился, что Chef::DataBag имеет метод list:

$ bundle exec ruby -e "require 'chef'; puts Chef::DataBag.methods" | grep list
list

не могли бы вы указать, что не так?


person Mr.    schedule 17.10.2014    source источник
comment
Вы используете ChefSpec?   -  person sethvargo    schedule 17.10.2014
comment
@sethvargo, нет. Я не. я показал все, что я использую.   -  person Mr.    schedule 17.10.2014


Ответы (1)


Вы неправильно написали "получить". Попробуй это:

allow(Chef::DataBag).to receive(:list).and_return {}
person Jordan Running    schedule 17.10.2014
comment
грррр. d4m|\| опечатка. я этого не заметил. стоит отметить, что хэш {} должен быть окружен (). я люблю переводчиков. Спасибо. - person Mr.; 17.10.2014