Rspec Ruby Basic Пример ошибки - PullRequest
       0

Rspec Ruby Basic Пример ошибки

8 голосов
/ 22 февраля 2011

Я пытаюсь запустить базовый стартовый пример использования rspec, найденный здесь: http://rspec.info/.

Когда я набираю в командной строке

ruby ​​bowling_spec.rb

Я получаю следующую ошибку

Тест

# bowling_spec.rb
require 'bowling'

describe Bowling, "#score" do
  it "returns 0 for all gutter game" do
    bowling = Bowling.new
    20.times { bowling.hit(0) }
    bowling.score.should == 0
  end
end

Код

# bowling.rb
class Bowling
  def hit(pins)
  end

  def score
    0
  end
end

Сообщение об ошибке

внутреннее: lib / rubygems / custom_require: 29: в require': no such file to load -- bowling (LoadError) from <internal:lib/rubygems/custom_require>:29:in require 'из bowling_spec.rb: 2: in`'

Ответы [ 4 ]

16 голосов
/ 22 февраля 2011

Это отличный простой пример для начала работы с rspec.Чтобы все работало, сделайте следующее:

  1. Поместите файл bowling.rb в lib / bowling.rb.
  2. Поместите файл bowling_spec.rb в spec / bowling_spec.rb.
  3. Запустите команду rspec spec/bowling_spec.rb, если вы используете rpsec 2.
  4. Запустите команду spec spec/bowling_spec.rb, если вы используете rspec 1.

Также обновленпример можно найти здесь .

4 голосов
/ 22 февраля 2011

В вашем bowling_spec.rb измените

require 'bowling'

на

require './bowling'

ruby ​​1.9 загружает пути иначе, чем ruby ​​1.8 и больше не добавляет текущий каталог по умолчанию

2 голосов
/ 22 февраля 2011

Как общая подсказка для решения таких сообщений об ошибках: в 99% всех случаев, когда компьютер сообщает, что не может что-то найти, это происходит потому, что эта вещь не существует.В 99% остальных случаев это не то, чего ожидает компьютер.

Первый, очевидно, здесь не тот случай, поскольку bowling.rb явно делает существовать.Тем не менее, ваша проблема прямо попадает в эти вторые 99%: require загружает файл из Ruby's $LOAD_PATH.Но вы не поместили bowling.rb в каталог на Ruby's $LOAD_PATH, вы просто поместили его в тот же каталог, что и bowling_spec.rb.

Одним очевидным решением было бы добавить этот каталог к ​​Ruby's * 1013.*.Очевидно, но - в данном случае - неправильно.

Если вы хотите загрузить файл относительно позиции текущего исполняемого файла, вам нужно использовать require_relative.В данном случае это правильное решение.

Обратите внимание, что для того, чтобы метод describe даже существовал , не говоря уже о работе, вам также потребуетсялибо добавьте require 'rspec' к вашему файлу спецификаций, либо запустите его с помощью программы запуска RSpec (т. е. rspec bowling_spec.rb вместо ruby bowling_spec.rb), но это совершенно не связано с проблемой, с которой вы сталкиваетесь.

1 голос
/ 22 февраля 2011

Во-первых, из примера видно, что вам нужно запустить rspec bowling_spec.rb или spec bowling_spec.rb, иначе не будут загружены методы описания, используемые для спецификации, и вы получите другие ошибки.

Далее, файлы находятся в одном каталоге? Они должны быть такими, как у вас есть настройка линии require. Кроме этого, я думаю, что это выглядит хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...