Тестирование уникальности в области видимости в проекте Rails с использованием musta (но не rspec) - PullRequest
6 голосов
/ 12 марта 2012

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

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 не может быть пустым (nil) "] (с другим значением tenant_id)

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

enter image description here

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

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

Ответы [ 2 ]

15 голосов
/ 03 августа 2012

Просто столкнулся с этой же проблемой. Мы смогли решить эту проблему, изменив

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

до

should validate_uniqueness_of(:email_id).scoped_to(:tenant_id)

Не знаю, если это точно такая же ситуация, но, по-видимому, наша проблема была вызвана тем, что вложенные ресурсы каким-то образом выбрасывали механизм сопоставления для цикла.

0 голосов
/ 15 апреля 2013

Я обнаружил, что у scoped_to есть неясные проблемы с некоторыми тестами.Всякий раз, когда встречаются, возникает необходимость написать больше подробных тестов и вручную проверить сбой при создании объекта в той же области.

...