Самый простой способ, вероятно, будет:
class UserEmailAddressDuplicateTest < ActiveSupport::TestCase
def setup
@email = "test@example.org"
@user1, @user2 = User.create(:email => @email), User.new(:email => @email)
end
def test_user_should_not_be_valid_given_duplicate_email_addresses
assert !@user2.valid?
end
def test_user_should_produce_error_for_duplicate_email_address
# Test for the default error message.
assert_equal "has already been taken", @user2.errors.on(:email)
end
end
Конечно, возможно, что вы не хотите создавать отдельный тестовый пример для этого поведения, и в этом случае вы можете продублировать логику в методе настройки и включить ее в оба теста (или поместить в приватный метод) .
В качестве альтернативы вы можете сохранить первого (эталонного) пользователя в приборе, например fixtures/users.yml
, и просто создать нового пользователя с дублирующимся адресом в каждом тесте.
Рефакторинг по вашему усмотрению!