Тест rspec, который использует фиктивные данные из всей таблицы в базе данных приложения rails - PullRequest
0 голосов
/ 02 февраля 2019

Я хочу написать тест rspec, который использует MyModel.all (т. Е. Все записи для модели), выполняет некоторые действия с ним и возвращает результат

Возможно ли создать новую таблицу базы данных (т.е. модель) изнутри rspec?А потом уничтожить его в конце теста?Считается ли это хорошей практикой (теоретически, если разработчик, работающий над проектом, по совпадению создал таблицу с тем же именем, и она могла быть отброшена тестом).Или это считается настолько маловероятным, что в тесте можно генерировать таблицу с произвольным именем?

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

Метод, который я пытаюсь протестировать, аналогичен

def my_method(model_name)
  the_table = eval(model_name).all

  # does some things

end

Ключевой особенностью метода является то, что он принимает название модели (и извлекает все записи для модели внутри метода)

Тест проводится в соответствии с правиламииз

it "ensures something" do

  # tests

  expect(result).to eq(true)

end

1 Ответ

0 голосов
/ 02 февраля 2019

Вот несложное решение

Rails автоматически создает тестовую базу данных с той же схемой, что и dev / prod.Поэтому все, что вам нужно сделать, это добавить некоторые данные перед запуском теста

например

# Add some records 
@model_name = Model_name.new(name: "John", email: "john@gmail.com")
@model_name.save

# run your test
it "ensures something" do

  # tests

  expect(result).to eq(true)

end

Также обратите внимание:

  • В ваших тестах rspec будет использоваться тестбаза данных, которая точно такой же структуры, что и ваша база данных разработки, но только потому, что она будет пустой (поэтому вам нужно добавить в нее некоторые данные)
  • Вы можете очень легко поместить данные в свою тестовую базу данных вТочно так же, как если бы вы использовали свои базы данных разработки (или производственные)
  • Обратите внимание, что все, что вы делаете с тестовой базой данных в файле spec.rb, будет откатываться после завершения тестов
...