Вопрос новичка о тесте Rspec в Rails

Я новичок в тесте rspec. У меня есть два вопроса по тесту rspec в Rails.

Если у меня есть модель Car, которая является ActiveRecord,

class Car < ActiveRecord::Base
  ...
  def get_color
    ..
  end
end 

Вопрос 1. В тесте rspec (у меня есть все готовые гемы и конфигурации), в чем разница между

before(:each) do
    @my_car=Factory.create(:car, params)
end

и

before(:each) do
    @my_car=Car.new(params)
    @my_car.save
end

(Я имею в виду, в чем разница внутри области проверки rspec, разве они не имеют такого же эффекта внутри проверки rspec? Не только внутри оператора before(:each) do, но и >опишите...сделайте заявление)

Вопрос 2. Как вы видите, в моей модели car есть функция экземпляра get_color. Могу ли я вызвать эту функцию экземпляра в моем тесте rspec следующим образом?

@my_car=Factory.create(:car, params)
@my_car.get_color #Can I call instance method in rspec test?

Я пробовал это, но кажется, что метод экземпляра не возвращает результат, ожидаемый в тесте rspec. Но работает за пределами тестового кода rspec, но я не уверен.

Кто-нибудь может прояснить мне два вопроса?


person Mellon    schedule 22.03.2011    source источник
comment
Лучше сделать 2 вопроса вместо одного   -  person shingara    schedule 22.03.2011


Ответы (2)


Вопрос 1 :

Нет никакой разницы между оператором 2 вместо использования Factory girl. С Factory girl у вас может быть некоторое поведение по умолчанию во время создания вашего объекта. Во втором случае вам нужно сделать это самостоятельно.

Вопрос 2 :

Вам нужно проверить свой метод. Если, например, вернуть 0, вы можете добавить:

it 'should return 0' do
  @my_car.get_color.should == 0
end

Мы не можем быть более конкретными с большим количеством кода

person shingara    schedule 22.03.2011

Q1: Это практически то же самое, хотя фабрики более гибкие, и я предпочитаю их.

Q2: Вы можете выполнить @my_car.get_color, но просто его выполнение ничего не значит. Вам нужно либо проверить, выполняет ли он условие (используя, вероятно, должен), либо заглушить его, чтобы вернуть желаемое значение, без фактического выполнения (обычная практика rspec).

person Spyros    schedule 22.03.2011