Тестовые данные RSpec Rails - PullRequest
       8

Тестовые данные RSpec Rails

1 голос
/ 19 марта 2012

Я пытаюсь немного оптимизировать свои спецификации.У меня обычно возникает проблема при создании тестовых данных для вложенных ресурсов и пользователей.Я обычно заканчиваю с before (: each), который устанавливает данные, это выполняется более чем 120 моими спецификациями.Позвольте мне показать вам: (это не точно, но вы должны понять)

def setup_test_data
  @user = FactoryGirl.create(:admin_with_account)
  @account = @user.account
  3.times do |n|
    list = FactoryGirl.create(:list)
    list.items << FactoryGirl.create_list(:item, 3)
    @account.lists << list
  end  
end

before(:each){setup_test_data}

subject{List.merge(list1, list2)}
it{should have(6).items}

И вот почему я не могу сократить настройку тестовых данных

def self.merge(lists)
  merged_list = lists.first.account.subscriber_lists.build
  name = "Merge of "
  lists.each do |list|
    name << "'#{list.name}', "
    list.items.each do |item|
      merged_list.items.build(item.dup.attributes)
    end
  end
  merged_list.name = name.chop.chop
  merged_list.save!
  merged_list.reload # I use this to filter out duplicates via validations
end

Мои параметры:А) перенести некоторую логику обратно в контроллер, меньше зависеть от учетной записи, сохранить в контроллере Б) заглушить / смоделировать намного больше, но с вложенными ресурсами + ассоциациями трудно сделать

В) вашу идею здесь:

Спасибо, Рэй

1 Ответ

0 голосов
/ 19 марта 2012

C) Создайте свою собственную задачу rapec RSpec, которая сначала импортирует некоторые базовые данные, затем используйте DatabaseCleaner, чтобы убедиться, что все выполняется транзакционно (вам придется вручную очищать БД после пользовательских задач rake, потому что по какой-то причине она не ' кажется, но с DatabaseCleaner это однострочный).

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

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

...