当我添加 rspec 测试时,其他测试开始失败
When I add rspec test, other tests start failing
当我添加此测试和 运行 整套测试时,另一个测试失败了。每次都是不同的,但错误总是一样的。
我正在使用 Rails,搭配 Devise 和 Paranoia(这是我正在测试的,用于软删除)。
这是错误:
SQLite3::ConstraintException: UNIQUE constraint failed: users.email: INSERT INTO "users" ("last_sign_in_at", "current_sign_in_at", "last_sign_in_ip", "current_sign_in_ip", "sign_in_count") VALUES (?, ?, ?, ?, ?)
这是使其他测试失败的测试。
require "rails_helper"
feature "User soft deletes project" do
scenario "successfully" do
user = create(:user)
login_as(user, scope: :user)
project = create(:project, creator: user)
visit edit_user_project_path(user, project)
expect {
click_on "Delete Project"
}.to change(Project, :count).by(-1)
expect(page).to have_content("Project was successfully destroyed")
expect(Project.unscoped.count).to eq(1)
end
end
您似乎没有在每个测试套件之间清除数据库。例如,您为第一个测试套件创建了一个用户。在你的下一个测试套件中,你再次创建一个用户,使用相同的电子邮件,这应该是唯一的,你会得到那个错误。将 database_cleaner
gem 添加到 Gemfile
、运行 bundle install
并将其添加到 spec_helper.rb
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
当我添加此测试和 运行 整套测试时,另一个测试失败了。每次都是不同的,但错误总是一样的。
我正在使用 Rails,搭配 Devise 和 Paranoia(这是我正在测试的,用于软删除)。
这是错误:
SQLite3::ConstraintException: UNIQUE constraint failed: users.email: INSERT INTO "users" ("last_sign_in_at", "current_sign_in_at", "last_sign_in_ip", "current_sign_in_ip", "sign_in_count") VALUES (?, ?, ?, ?, ?)
这是使其他测试失败的测试。
require "rails_helper"
feature "User soft deletes project" do
scenario "successfully" do
user = create(:user)
login_as(user, scope: :user)
project = create(:project, creator: user)
visit edit_user_project_path(user, project)
expect {
click_on "Delete Project"
}.to change(Project, :count).by(-1)
expect(page).to have_content("Project was successfully destroyed")
expect(Project.unscoped.count).to eq(1)
end
end
您似乎没有在每个测试套件之间清除数据库。例如,您为第一个测试套件创建了一个用户。在你的下一个测试套件中,你再次创建一个用户,使用相同的电子邮件,这应该是唯一的,你会得到那个错误。将 database_cleaner
gem 添加到 Gemfile
、运行 bundle install
并将其添加到 spec_helper.rb
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end