Сборка FactoryGirl игнорируется при тестировании с Shoulda Matchers

Я недавно перешел на Shoulda Matchers, но, похоже, не могу проверить свои заводские сборки. Я создал экземпляр своей фабрики в обратном вызове до, но сопоставитель, похоже, даже не признает это. Например, я намеренно установил имя своего экземпляра на nil, но тест не возвращает ошибок. Что я делаю неправильно?

require 'rails_helper'

describe Restaurant do
  context 'validations' do
    before { FactoryGirl.build(:restaurant, name: nil) }

    it do
      should validate_presence_of(:name)
    end
  end
end

person Carl Edwards    schedule 11.07.2015    source источник


Ответы (1)


Для этого сценария вам не требуется экземпляр для сопоставления с сопоставителями Shoulda; он собирается только проверить использование validate_presence_of против самого определения модели.

Итак, я бы переписал ваш тест следующим образом:

require 'rails_helper'

describe Restaurant do
  it { should validate_presence_of(:name) }
end
person Makoto    schedule 11.07.2015
comment
Итак, насколько я понимаю, в некотором смысле он просто проверяет, имеет ли эта конкретная модель валидатор presence, связанный с атрибутом :name? - person Carl Edwards; 11.07.2015
comment
Довольно много. Я готов поспорить, что на самом деле есть некоторая проверка атрибута с тестовыми данными в сопоставлении, но этот экземпляр не является чем-то, что вы должны предоставлять или выполнять. - person Makoto; 11.07.2015
comment
Я понимаю. Как тогда вы будете тестировать фабрики с помощью устройств соответствия требованиям? - person Carl Edwards; 11.07.2015
comment
По моему опыту, никогда не имело смысла напрямую тестировать factory; если я тестирую что-то в самой модели, для чего требуется ее экземпляр, я делаю это так, как считаю нужным. Но я чувствую, что это может быть отдельный вопрос. ;) - person Makoto; 11.07.2015
comment
Право на. Спасибо за вашу помощь. - person Carl Edwards; 11.07.2015
comment
Если вы хотите протестировать фабрику, вы можете построить ее и проверить, что она действительна, или использовать FactoryGirl.lint. - person Elliot Winkler; 12.07.2015
comment
@ElliotWinkler: Пожалуйста, нет; если у вас есть что добавить по этому поводу, вы должны начать свой собственный вопрос и ответить на него. Это вопрос не о фабриках по тестированию. - person Makoto; 12.07.2015