Инициализация отношения «многие ко многим» с предопределенными значениями объекта - PullRequest
0 голосов
/ 03 января 2019

У меня есть модель, аналогичная модели Categories, обсуждаемой в в этом предыдущем обсуждении отношений "многие ко многим" .Вкратце, у меня есть много категорий акций (~ 200 категорий), которые я хочу загрузить для всех пользователей.Я хочу has_and_belongs_to_many relationship, чтобы я мог легко найти тех пользователей, которые имеют различные категории, и подсчитать количество пользователей в каждой категории.Если пользователь удаляет использование своей категории, мне нужно, чтобы она была доступна другим, даже если никто ее не использует.

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

В db/seeds.rb, у меня есть массив ...

c = [ "Category 1", "Category 2", "Category 3", "Category 4" ]
c.each { |cat| Category.create!(category: cat)}

Я знаю, что есть проблема в тестовом режиме, потому что, если я включу ...

$stdout.print Category.first.category

в тест, я получу ...

Error:
CategoryTest#test_should_be_valid:
    NoMethodError: undefined method `category' for nil:NilClass
    test/models/category_test.rb:17:in `block in <class:CategoryTest>'

В качестве альтернативы, если яdo ...

Category.create!(category: "Category 5")
$stdout.print Category.first.category

Он выводит Category 5.

Есть какие-нибудь идеи о лучшем способе инициализации Category объектов и как я могу его увидеть в тестовом режиме?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Если вы действительно хотите сделать это с помощью seed, попробуйте RAILS_ENV=test rake db:seed (или db:reset, если вы не уверены, что ваша тестовая БД работает вверх и вверх.

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

0 голосов
/ 03 января 2019

db seed не предназначена для тестирования.

Вы можете использовать испытательные приборы (рельсы встроены в одну)

https://guides.rubyonrails.org/testing.html

или factory_bot_rails для заполнения тестовых данных в вашей тестовой базе данных перед началом каждого юнит-теста

https://github.com/thoughtbot/factory_bot_rails 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...