Попытка понять, как работает тестирование Rails и возникли проблемы с моделью - PullRequest
0 голосов
/ 16 апреля 2019

Использование https://guides.rubyonrails.org/testing.html, чтобы научиться разрабатывать автоматизированные тесты.Я запустил rails db: test: prepare, а затем отредактировал значение по умолчанию ./test/model/user_test.rb (у меня есть модель пользователя).Этот тест кажется очень простым, но я получаю следующую ошибку:

Mysql2 :: Ошибка: поле 'имя_экранов' не имеет значения по умолчанию

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

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

Я прыгал, чтобы определить, что на самом деле делает этот тест, так как нет реального описания.Может быть, это недопустимый тест, просто какие-то строительные леса?

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

Я попробовал следующее:

@User = users.new
@User.screen_name = "Name"
...
@User.save

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

Тест контроллера по умолчанию получает точно такой же результат.

. / Test / model / user_test.rb:

require 'test_helper'

class UserTest < ActiveSupport::TestCase
   test "the truth" do
     assert true
   end
end

MySQL Table Desc:

mysql> desc users;
+-----------------+--------------+------+-----+---------+--------------
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+--------------
| id              | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| screen_name     | varchar(255) | NO   |     | NULL    |                |
| email           | varchar(255) | NO   |     | NULL    |                |
| password_digest | varchar(255) | NO   |     | NULL    |                |
| created_at      | datetime     | NO   |     | NULL    |                |
| updated_at      | datetime     | NO   |     | NULL    |                |
+-----------------+--------------+------+-----+---------+--------------

Я не знал, чего ожидать, но не ожидал того, что получил.За прошедшие годы я научился начинать с дефолта и наращивать.

Запуск через предварительный загрузчик Spring в процессе 15156 Параметры запуска: --seed 50091

Запуск:

Ошибка: UserTest # test_the_truth: Mysql2 :: Ошибка: Поле 'screen_name 'не имеет значения по умолчанию bin / rails test test / models / user_test.rb: 4 Завершено за 0.006803 с, 146.9987 циклов / с, 0.0000 утверждений / с.1 прогоны, 0 подтверждений, 0 отказов, 1 ошибок, 0 пропусков

1 Ответ

0 голосов
/ 17 апреля 2019

Это потому, что вы объявили нулевое ложное условие в таблице User.Rails загружает все приборы перед запуском каждого теста, поэтому при запуске приспособления test/fixtures/users.yml Rails выдает ошибку, так как приспособление не имеет значений, требуемых вашей базой данных.

Чтобы решить эту проблему, нужно либоудалите прибор: test/fixtures/users.yml или добавьте правильные, необходимые значения внутри прибора.

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

Вероятно, это выглядит так:

user:
  id: 1
  screen_name: Spongebob Squarepants # this might be missing!
  email: squidwards_bestie@thebottomofthesea.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...