Rails MiniTest, Почему этот процесс не успешен, а не ошибка? - PullRequest
0 голосов
/ 17 мая 2019
[woo:~/Development … e-roles/test] master(+7/-3) 23s ± rails test
Running via Spring preloader in process 18905
Run options: --seed 34925

# Running:

E

Error:
UserTest#test_User_must_have_an_email_address:
ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constraint failed: users.email: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2019-05-16 23:08:53.696224', '2019-05-16 23:08:53.696224', 298486374)



bin/rails test test/models/user_test.rb:4



Finished in 0.019202s, 52.0779 runs/s, 0.0000 assertions/s.
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips

Теперь, вот user_test.rb

[woo:~/Development … e-roles/test] master(+7/-3) 1 ± cat models/user_test.rb
require 'test_helper'

class UserTest < ActiveSupport::TestCase
   test "User must have an email address" do
     user = User.new
     assert_raise SQLite3::ConstraintException   do
     user.save
     end
    end
end

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

1 Ответ

1 голос
/ 17 мая 2019

Я думаю, что для того, чтобы пройти этот тест, вам нужно утверждать об исключении Ruby, а не об исключении SQLite3.Ваша модель ActiveRecord (я предполагаю) - это то место, где определено ограничение.

Примерно так:

assert_raise ActiveRecord::RecordNotUnique do
  user.save
end

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

...