Можно ли использовать FactoryGirl без Rails? - PullRequest
2 голосов
/ 05 марта 2011

Я создаю приложение с графическим интерфейсом, которое взаимодействует с базой данных, поэтому мне нужно управление приборами для моих тестов RSpec.Я использую базу данных sqlite и собираюсь написать класс, который будет манипулировать данными с прямым SQL.Мне нужно проверить его функциональность взаимодействия с базой данных.

Я не смог найти библиотек, которые могли бы выполнять 2 основных действия при запуске тестов RSpec:

  1. Очистить базу данных или определенные таблицы в ней
  2. Загрузите в него конкретные данные, чтобы я мог использовать эти данные в своих тестах

Уже есть десять тысяч постов и руководств в блогах, в которых четко объясняется, как использовать FactoryGirl с любой версиейРельсы, но никто без это.Я начал копаться, и вот что у меня есть (обратите внимание, что я не использую рельсы и их компоненты):

spec/note_spec.rb:

require 'spec_helper'
require 'note'

describe Note do
  it "should return body" do
    @note = Factory(:note)
    note.body.should == 'body of a note'
  end
end

spec/factories.rb:

Factory.define :note do |f|
  f.body 'body of a note'
  f.title 'title of a note'
end

lib/note.rb:

class Note
  attr_accessor :title, :body
end

Когда я запускаю rspec -c spec/note_spec.rb, я получаю следующее:

F

Failures:

  1) Note should return body
     Failure/Error: @note = Factory(:note)
     NoMethodError:
       undefined method `save!' for #<Note:0x8c33f18>
     # ./spec/note_spec.rb:6:in `block (2 levels) in <top (required)>'

Вопросы:

  1. Возможно ли это привсе, чтобы использовать FactoryGirl без Rails и библиотек Rails, таких как ActiveModel / ActiveRecord?
  2. Нужно ли создавать подкласс моего Note класса из определенного класса, поскольку FactoryGirl ищет метод save!?
  3. Есть ли другие, более приемлемые решения, кроме FactoryGirl?

Я совершенно новичок в Ruby / RSpec / BDD, поэтому любая помощь будет принята с благодарностью;)

1 Ответ

9 голосов
/ 05 марта 2011

По умолчанию factory_girl создает сохраненные экземпляры.Если вы не хотите сохранять объект в базе данных, вы можете создать несохраненные экземпляры, используя метод build.

require 'spec_helper'
require 'note'

describe Note do
  it "should return body" do
    @note = Factory.build(:note)
    note.body.should == 'body of a note'
  end
end

См. «Использование фабрик» в файле Getting Started .

...