Как написать тестирование rspec без базы данных в ruby ​​для этого кода ruby

Я создаю проект ruby ​​с классом, который является наследством ActiveRecord::Base. Как я могу написать тестирование rspec и простое покрытие для следующего примера кода без использования базы данных.

class Person < ActiveRecord::Base
    validates_length_of :name, within: 10..40
end
person = Person.create(:name => "aungaung")
person.save

2 ответа

Если вы не хотите трогать дБ, FactoryGirl.build_stubbed твой друг.

> person = FactoryGirl.build_stubbed :person
> person.save!
> #=> person obj
> Person.all
> #=> [] # Not saved in db

Итак, чтобы проверить валидацию

it "validates name at length" do
   person = FactoryGirl.build_stubbed :person, name: "aungaung"
   expect{person.save!}.to raise_error(ActiveRecord::RecordInvalid)
end

Обратите внимание, что build_stubbed хорош для модульного тестирования модели. Для чего-либо, связанного с пользовательским интерфейсом, вы не можете использовать этот метод, и вам нужно сохранить его в БД.

Вот краткий пример тестирования проверок на модели ActiveRecord. Конечно, вы можете пойти гораздо глубже, и есть множество способов сделать тесты более элегантными, но этого будет достаточно для первого теста.

describe Person do

  describe "#name" do
    specify { Person.new(:name => "Short").should_not be_valid }
    specify { Person.new(:name => "Long" * 12).should_not be_valid }
    specify { Person.new(:name => "Just Right").should be_valid }
  end

end
Другие вопросы по тегам