Ruby on Rails2.3.8: модульное тестирование: Rails / Ruby настроен для запуска перед каждым тестом.Как насчет метода, который выполняется перед всеми тестами? - PullRequest
5 голосов
/ 21 июня 2011

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

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Во-первых: раньше в Test :: Unit был эквивалент до (: all), но он был удален (не знаю почему).

Во-вторых: есть очень веские причины не делать то, что вы пытаетесь сделать, - тесты должны выполняться независимо друг от друга, а не полагаться на состояние, которое находится в БД. Таким образом, вы можете гарантировать, что он тестирует точно то, что вы ожидаете, чтобы протестировать.

Если у вас есть один тест, который изменяет состояние БД, и вы перемещаете его, и он запускается после другого теста, который ожидает, что это будет другое состояние - у вас возникают проблемы. Таким образом, все тесты должны быть независимыми.

Таким образом: БД возвращается в исходное состояние и каждый раз пересеивается.

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

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

Если есть какая-то другая причина ... сообщите нам - у нас может быть решение для нее.

Редактировать: если вам это действительно нужно, я на самом деле написал патч обезьяны для этого давным-давно: «Фальсификация запуска и выключения»

2 голосов
/ 21 июня 2011

Все, что нужно запустить до того, как все пойдет в топ класса

require 'test_helper'

class ObjectTest < ActiveSupport::TestCase
  call_rake("db:bootstrap RAILS_ENV=test")

  #set up our user for doing all our tests (this person is very busy)  
  @user = Factory(:user)
  @account = Factory(:account)    
  @user.account = @account
  @user.save

  # make sure our user and account got created 
  puts "||||||||||||||||||||||||||||||||||||||||||||||"
  puts "| propsal_test.rb"
  puts "|      #{@user.name}"
  puts "|      #{@user.account.name}"
  puts "||||||||||||||||||||||||||||||||||||||||||||||"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...