Тесты Ruby Rails 5.1.6 не проходят на уникальном столбце - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь запустить из коробки тесты, но они проваливаются в уникальном столбце.У кого-нибудь еще возникла эта проблема?

rails new MyApp
rails g scaffold Person name:string:uniq note:text
rails db:migrate

Отредактировал мой прибор на:

one:
  name: ONE
  note: MyText

two:
  name: TWO
  note: MyText

People_controller_test.rb имеет это для загрузки исходного прибора:

class PeopleControllerTest < ActionDispatch::IntegrationTest
  setup do
    @person = people(:one)
  end

Но похоже, что он загружает оба, как я нахожу это в базе данных:

sqlite> select * from people;
298486374|TWO|MyText|2018-06-06 23:21:29.686780|2018-06-06 23:21:29.686780
980190962|ONE|MyText|2018-06-06 23:21:29.686780|2018-06-06 23:21:29.686780

Я получаю эту ошибку:

Error:
PeopleControllerTest#test_should_create_person:
ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constraint failed: people.name: INSERT INTO "people" ("name", "note", "created_at", "updated_at") VALUES (?, ?, ?, ?)
    app/controllers/people_controller.rb:30:in `block in create'
    app/controllers/people_controller.rb:29:in `create'
    test/controllers/people_controller_test.rb:20:in `block (2 levels) in <class:PeopleControllerTest>'
    test/controllers/people_controller_test.rb:19:in `block in <class:PeopleControllerTest>'


bin/rails test test/controllers/people_controller_test.rb:18

.

Finished in 0.848814s, 8.2468 runs/s, 8.2468 assertions/s.
7 runs, 7 assertions, 0 failures, 1 errors, 0 skips

Удаление файла test.sqlite3 не исправляетЭто.(Я видел, что у людей есть проблемы с неуникальными данными)

Я использую Rails 5.1.6 с Ruby 2.4.1p111.

Любая помощь приветствуется.

Спасибо

Счет

1 Ответ

0 голосов
/ 07 июня 2018

Я предполагаю, что вы используете автоматически сгенерированные тесты, содержащие следующий код:

test 'create' do
  assert_difference 'People.count' do
    post people_url, params: { people: { name: people(:one).name }}
  end
end

Можете ли вы увидеть, что происходит?Тестовые рельсы, генерируемые для вашего действия создания, используют атрибут name для первого приспособления людей.Измените его на что-то вроде этого:

test 'create' do
  assert_difference 'People.count' do
    post people_url, params: { people: { name: 'Matz' }}
  end
end

Это может сделать это.Удачи.

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