0
[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,它确实如此。如果引发适当的异常,我希望测试成功。我究竟做错了什么?

4

1 回答 1

2

我认为要让这个测试通过,你需要断言 Ruby 异常,而不是 SQLite3 异常。您的 ActiveRecord 模型(我猜)是定义约束的地方。

像这样的东西:

assert_raise ActiveRecord::RecordNotUnique do
  user.save
end

即使您将来切换到不同的数据库,断言 Ruby 异常也会使该测试通过,这是使用 ORM 的主要原因之一。

于 2019-05-16T23:41:39.057 回答