簡體   English   中英

Rails MiniTest,為什么這個過程沒有成功而不是錯誤?

[英]Rails MiniTest, Why doesn't this process as a success instead of an error?

[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。 如果引發了適當的異常,我希望測試成功。 我究竟做錯了什么?

我認為要使此測試通過,您需要聲明Ruby異常,而不是SQLite3異常。 您正在定義約束的ActiveRecord模型(我猜是這樣)。

像這樣:

assert_raise ActiveRecord::RecordNotUnique do
  user.save
end

聲明Ruby異常將使該測試通過,即使將來您切換到其他數據庫也是如此,這是使用ORM的主要原因之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM