Тестирование Rails Controller: Сохраняется ли изменение состояния базы данных после успешного прохождения теста? - PullRequest
2 голосов
/ 12 марта 2011

Я тестирую метод создания BranchController, используя ActionController :: TestCase (код ниже). Я проверяю, создан ли объект, вызывая метод find_by_name (предположим, что имя здесь уникально). Тест выполняется успешно, но когда я проверяю ту же запись в MySQL DB, его там нет.

    class Security::BranchControllerTest < ActionController::TestCase
      test "the create" do
     post(:create, :branch => {:name => "test branch", :details=> "test branch details"})

     #replace find with where searching with all of fields 
     assert_not_nil Company::Branch.find_by_name("test branch") 
      end   
    end

1 Ответ

5 голосов
/ 12 марта 2011

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

Это означает, что вставка действительно происходит, но результат не виден за пределами теста.

Вы должны увидеть операции сохранения и отката в журналах испытаний.

Если вы хотите отключить это, вы можете добавить

self.use_transactional_fixtures = false

в вашем тестовом классе или исправьте его для всех ваших тестов, добавив что-то вроде

class ActiveSupport::TestCase
  self.use_transactional_fixtures = false
end

в вашем классе test_helper.

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

...