Тестирование уникальности в области в проекте Rails с использованием должно (но не rspec)

У меня есть класс пользователя с электронной почтой, которая уникальна, но привязана к клиенту:

class User < ActiveRecord::Base
  validates :email, :uniqueness => {:scope => :tenant_id, :allow_blank => true}
  #...
end

Я пытаюсь протестировать его с помощью:

class UserTest < ActiveSupport::TestCase
  context "a user" do
    setup { @user = create :user }
    subject { @user }

    should validate_uniqueness_of(:email).scoped_to(:tenant_id)
  end
end

, но тест не удается с этим сообщением:

Ожидаемые ошибки включают «уже занято», когда для электронной почты установлено значение «joseph.allen_1@example.com», возникли ошибки: [«электронная почта уже занята ("joseph.allen_1@example.com")», «first_name не может быть пустым (nil)», «last_name не может быть пустым (нулевым)»] (с разным значением tenant_id)

, что вызывает много вопросов. Почему сообщение об ошибке не совпадает? Кажется, потому что фактический адрес электронной почты включен в сообщение об ошибке, но почему он включен? Когда я генерирую ошибку из пользовательского интерфейса, она, кажется, не включена:

enter image description here

Кроме того, в конце он говорит, что он пытается сделать это с другим клиентом, который, если он был истинным, он не должен генерировать какую-либо ошибку (это не так, когда я запускаю само приложение), но почему он ожидает ошибку? Следует ожидать ошибки только в том случае, если она совпадает tenant_id.

Это так запутанно. Есть идеи, что происходит и / или как правильно проверить это?

7
задан Charles 12 March 2012 в 15:58
поделиться