Minitest で少し遊んでみたところ、説明が見つからないように見える動作が見つかりました。
次のような非常に単純なモデル テスト ファイルがあります。
require 'minitest_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobards", password_confirmation: "foobards")
end
describe "with admin attribute set to 'true'" do
before { @user.toggle!(:admin) }
it { @user.admin.must_equal true }
end
end
「rake db:test:prepare」の後に初めてこのコードを実行すると、テストに合格します
2 回連続して実行すると、エラーが発生します。
test_0001_anonymous 0:00:00.132
ERROR SQLite3::ConstraintException: 列の電子メールが一意ではありません: INSERT INTO "users" ("admin", "created_at", "email", "name", "password_digest", "updated_at") VALUES ( ?, ?, ?, ?, ?, ?)
それでも、このエラーは発生しないようです
before { @user.toggle!(:admin) }
私の minitest_helper.rb は次のとおりです。
ENV["RAILS_ENV"] = "test"
require File.expand_path("../../config/environment", __FILE__)
require "minitest/autorun"
require "capybara/rails"
require "active_support/testing/setup_and_teardown"
class IntegrationTest < MiniTest::Spec
include Rails.application.routes.url_helpers
include Capybara::DSL
register_spec_type(/integration$/, self)
end
class HelperTest < MiniTest::Spec
include ActiveSupport::Testing::SetupAndTeardown
include ActionView::TestCase::Behavior
register_spec_type(/Helper$/, self)
end
Turn.config.format = :outline
これがバグなのか、それとも (より可能性が高い) 何かが足りないのか、私には理解できないようです。私より詳しい方、説明していただけないでしょうか?