Если вы застряли с Руби 1.9.1, я думаю, что у меня есть для вас решение, но предупреждение - это немного рубить!
Если вы посмотрите на сообщение об ошибке, он говорит, что отказ от линии 60 /lib/rspec/mocks.rb. Итак, давайте посмотрим на: https://github.com/rspec/rspec-mocks/blob/v2.13.0/lib/rspec/mocks.rb
def add_extensions
method_host.class_eval { include RSpec::Mocks::Methods } # (line 60)
Class.class_eval { include RSpec::Mocks::AnyInstance }
$_rspec_mocks_extensions_added = true
end
Обратите внимание, что первая строка этого частного метода (строка 60) зовёт «method_host». Итак, давайте взглянем на несколько строк вниз на частном методе «method_host»:
def method_host
# On 1.8.7, Object.ancestors.last == Kernel but
# things blow up if we include `RSpec::Mocks::Methods`
# into Kernel...not sure why.
return Object unless defined?(::BasicObject)
# MacRuby has BasicObject but it's not the root class.
return Object unless Object.ancestors.last == ::BasicObject
::BasicObject
end
Вы можете видеть, что есть несколько условий, при которых он иногда возвращает «Object» и «иначе BasicObject» возвращается. Таким образом, это заставило меня задуматься, не можем ли мы добавить свое собственное условие.
return Object unless defined?(::BasicObject::RSpec)
Мы можем проверить это путем создания файла, позволяет называть его mocks_hack.rb, где мы будем переопределять «method_host», чтобы включить наше состояние.
module RSpec
module Mocks
class << self
private
def method_host
# On 1.8.7, Object.ancestors.last == Kernel but
# things blow up if we include `RSpec::Mocks::Methods`
# into Kernel...not sure why.
return Object unless defined?(::BasicObject)
# MacRuby has BasicObject but it's not the root class.
return Object unless Object.ancestors.last == ::BasicObject
# Jon's hack for Anurag Uniyal
return Object unless defined?(::BasicObject::RSpec)
::BasicObject
end
end
end
end
Из текущего каталога mocks_hack.rb, запуск IRB и следующий код должен «работать».
require 'rspec'
require './mocks_hack'
RSpec::Mocks::setup(Object.new)
Теперь, это приходит с оговоркой - это хак, и я не совсем понимаю, что могло бы быть последствия внесения этих изменений. Надеюсь, это помогает и является жизнеспособным решением.
вы пробовали 'требовать»/RSpec/mock'' – BlackHatSamurai
@Blaine «./rspec/mock» или»./rspec/mocks' не работает - LoadError: нет такого файла для загрузки - ./rspec/mocks –
не уверен, что проблема, но я был в состоянии воспроизвести ошибку вам «Посмотрите, установив Ruby 1.9.1-p376. Вы можете получить более позднюю версию Ruby? Мое тестирование с 1.9.2 и 1.9.3 работает нормально. Как хорошо, я бы посоветовал вам взглянуть на РВМ: https://rvm.io/rvm/install/ –