Как я могу изменить мою схему БД при запуске спецификации? - PullRequest
1 голос
/ 13 июня 2011

Я хочу протестировать модельный миксин, поэтому я хочу создать поддельную модель activerecord, чтобы включить ее, а затем протестировать поведение этой модели.

Спецификации, которые у меня есть из другого контекста, требуют БДТаблица поддельной модели для существования (я знаю, я не должен зависеть от этого, но это так, как они сейчас).Поэтому мне нужно создать таблицу для поддельной модели (TestModel), пока спецификация работает.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Это может показаться излишним, но, на мой взгляд, если библиотека нуждается в тестировании в абстракции, возможно, стоит извлечь ее в гем или плагин.

Обычно в моем приложении я проверяю последствиямиксинов, а не сами миксины.И держите тесты mixin внутри соответствующего плагина или гема.

Если в нем содержится важная бизнес-логика (или ваша компания не разрешит вам ее открывать), сохраните его в качестве плагина.

Еслиобычно его можно использовать, а затем разбить на него как на драгоценный камень.

Вот пример абстрагированного мной драгоценного камня http://bit.ly/hJ4QC2

Практически просто используйте шаблон rails g plugin и добавьте что-то вроде следующего

require 'active_record'

ActiveRecord::Base.establish_connection(
  :adapter => "sqlite3",
  :database => ":memory:"
)

ActiveRecord::Schema.define(:version => 0) do
  create_table :somethings, :force => true do |t|
    t.string :size
  end
end

и у вас должен быть тест для плагина

0 голосов
/ 13 июня 2011

В этом случае относитесь к поддельной модели как к внешнему сервису и макетируйте контейнер другой модели.Что-то вроде

faked_model = mock "FakeModelThatShouldntExist"
faked_model.stub!(:name).and_return("jwo")
FakeModelThatShouldntExist.should_receive(:find_by_customer_id).and_returns(faked_model)

Запускать тесты как обычно

...