2015-03-26 2 views
0

Я не могу понять, почему следующий тест Rspec не проходит -Рубин основной RSpec не проходит

require "rspec" 

require_relative "file-to-be-tested" 

describe Customer do 
    it "is valid with firstname" do 
     customer = Customer.new("handy") 
     expect(customer).to be_valid 
    end 
end 

для соответствующего определения класса -

class Customer 
    attr_reader :firstname 
    def initialize(firstname) 
     @firstname = firstname 
    end 
end 

эти два фрагмента кода находятся в отдельных файлах в той же папке, поэтому, когда я запускаю ~rspec <first-filename> в терминале, я получаю следующую ошибку:

F 

Failures: 

    1) Customer is valid with firstname 
    Failure/Error: expect(customer).to be_valid 
     expected #<Customer:0x007f90e50f3110> to respond to `valid?` 
    # ./poodr/poodr_rspec.rb:8:in `block (2 levels) in <top (required)>' 

Finished in 0.00551 seconds (files took 0.52876 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./poodr/poodr_rspec.rb:6 # Customer is valid with firstname 

ответ

1

be_valid - метод rspec-rails, но похоже, что вы используете только прямой rspec. вы могли бы сделать что-то вроде:

require "rspec" 

require_relative "file-to-be-tested" 

describe Customer do 
    it "is valid with firstname" do 
     expect { Customer.new('handy') }.to_not raise_error 
    end 
end 
+0

ах, право, конечно, спасибо! – user3588841

0

Что вы ожидаете от be_valid теста? Проблема в том, что класс Customer не имеет метода, который называется valid? который ваш тест пытается проверить.

хак, чтобы переместить тест вместе, если ваш делать тест ведомой развития:

class Customer 
    def valid? 
    true 
    end 
end 

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

+0

я следовал способу, описанному в документации - http://www.rubydoc.info/gems/rspec-rails/RSpec/Rails/Matchers#be_valid-instance_method 'вещь = Thing.new ожидать (вещь) .to be_valid' – user3588841

+0

Этот документ ожидает, что класс наследуется от ActiveRecord :: Base: класс Customer John

Смежные вопросы