Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Ubuntu, Ruby, Rspec и кривые руки :)  (Прочитано 1622 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nattfodd

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Ubuntu, Ruby, Rspec и кривые руки :)
« : 30 Июня 2013, 00:37:20 »
Добрый день, уважаемое сообщество. Начав свое изучение с языком Ruby столкнулся с неожиданной проблемой, а именно - с установкой/настройкой гема rspec.

Устанавливал rspec по аналогии с другими гемами (пока пригодился только гем pony - работает нормально) командой gem install rspec
Написал для своего класса тест, который так и не удается завести. Гугл на предмет ошибок выдает всего три ссылки, не имеющие отношения к моей проблеме, поэтому обращаюсь за помощью к обитающим здесь рубистам.

Код класса (отдельно работает, проверял, код практически не мой - учебный от проекта hasBrains, но не суть). Класс просто вычисляет цену с учетом выдуманных налогов и скидок.

item.rb
class Item
 
  @@discount = 0.9
 
  def self.discount
    if Time.now.month == 4
      return @@discount - 0.2
    else
      return @@discount
    end
  end
 
  def initialize(options={})
    @real_price = options[:price]
    @name = options[:name]
  end

  attr_writer :price
  attr_reader :name, :price, :real_price
 
  def info
    #[price, weight, name]
    yield(price)
    yield(name)
  end
 
  def price
    ((@real_price * self.class.discount) + tax).to_i if @real_price
  end
 
  private

    def tax
      type_tax = if self.class == VirtualItem
        1
      else
        2
      end
      cost_tax = if @real_price > 5
        @real_price * 0.2
      else
        @real_price * 0.1
      end
      return cost_tax + type_tax
    end 

end

А вот код теста:

item_spec.rb
require "rspec"
require_relative "../item"

describe Item do

  it "calculates price according to special formula" do
    item1 = Item.new ({:name => "buckler", :price => 200}) 
    item1.price.should == 112
  end

end

Вызываю тест командой rspec spec (или напрямую rspec spec/item_spec.rb - без разницы), вижу вот такой вот странный результат:

nattfodd@nattfodd:~/ruby/shop$ rspec spec/item_spec.rb


Failures:

  1) Item calculates price according to special formula
/var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:167:in `failure_color': undefined method `failure_color' for #<RSpec::Core::Configuration:0x00000000820c30> (NoMethodError)
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:262:in `dump_failure_info'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:256:in `dump_failure'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:24:in `block in dump_failures'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:22:in `each'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:22:in `each_with_index'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/formatters/base_text_formatter.rb:22:in `dump_failures'
from /usr/lib/ruby/vendor_ruby/rspec/core/reporter.rb:98:in `block in notify'
from /usr/lib/ruby/vendor_ruby/rspec/core/reporter.rb:97:in `each'
from /usr/lib/ruby/vendor_ruby/rspec/core/reporter.rb:97:in `notify'
from /usr/lib/ruby/vendor_ruby/rspec/core/reporter.rb:81:in `finish'
from /usr/lib/ruby/vendor_ruby/rspec/core/reporter.rb:36:in `ensure in report'
from /usr/lib/ruby/vendor_ruby/rspec/core/reporter.rb:36:in `report'
from /usr/lib/ruby/vendor_ruby/rspec/core/command_line.rb:25:in `run'
from /usr/lib/ruby/vendor_ruby/rspec/core/runner.rb:69:in `run'
from /usr/lib/ruby/vendor_ruby/rspec/core/runner.rb:10:in `block in autorun'

Исходя из ошибок я понимаю, что я как-то не так установил гем - ну или с ним что-то не так ;D

Попробовал запустить тест через bundler (пока не знаю, что это, просто нашел один из способов):

nattfodd@nattfodd:~/ruby/shop$ bundle exec rspec spec/item_spec.rb
Could not locate Gemfile

На просторах интернета еще встречал решение удалить/пересоздать файл gemfile.lock, вот только где он находится я так и не понял.

Тесты - очень важная часть в процессе изучения языка, очень не хочется откладывать их в дальний ящик. Помогите настроить, пожалуйста  :-[.

Добавлено: переустановил rspec и установил rspec через Bundler, вывод в обоих случаях одинаковый:

nattfodd@nattfodd:~/ruby/shop$ rspec
/var/lib/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/rubygems_integration.rb:214:in `block in replace_gem': steak is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
from /home/nattfodd/ruby/shop/spec/item_spec.rb:8:in `<top (required)>'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `block in load_spec_files'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `each'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load_spec_files'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/command_line.rb:22:in `run'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:80:in `run'
from /var/lib/gems/1.9.1/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:17:in `block in autorun'

Пользователь решил продолжить мысль 30 Июня 2013, 08:11:51:
Убив полночи на гугление все же нашел элементарный источник проблемы - надо было установить гем steak :)
« Последнее редактирование: 30 Июня 2013, 08:11:51 от Nattfodd »

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.