Доступ factory_girl фабрики в *другой* фабрики

Я использую factory_girl плагин в своем приложении направляющих. Для каждой модели у меня есть соответствующий рубиновый файл, содержащий данные фабрики, например.

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  # t.user ???
end

У меня есть много различных типов пользователей (уже определенный на пользовательской фабрике). Если я пробую следующее хотя:

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  t.user Factory(:valid_user) # Fails
end

Я получаю следующую ошибку:

# No such factory: valid_user (ArgumentError)

: valid_user на самом деле допустим, хотя - я могу использовать его в своих тестах - просто не на моих фабриках. Есть ли какой-либо способ, в котором я могу использовать фабрику, определенную в другом файле здесь?

20
задан Michelle 10 February 2010 в 00:51
поделиться

2 ответа

Я имел эту проблему в Safari и Chrome (Mac) и обнаружил, что .scrollTop будет работать на $ («тело») , но не $ («html, тело») , FF и IE, однако работает в другом раунде пути. Простое обнаружение браузера устраняет проблему:

if($.browser.safari)
    bodyelem = $("body")
else
    bodyelem = $("html,body")

bodyelem.scrollTop(100)

Значение браузера jQuery для Chrome - Safari, поэтому для этого необходимо только выполнить обнаружение.

Надеюсь, это кому-то поможет.

-121--1218638-

Я использую плагин mark.vim, чтобы визуально отметить слова. Позволяет отмечать разные слова разными цветами одновременно и перейдите к вхождениям. На мой взгляд, эта особенность очень полезна, особенно для анализа кода или для перехода к файлам регистрации.

mark.vim

-121--3977956-

Необходимо использовать этот код:

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  t.user { Factory(:valid_user) }
end

Перенос вызова в {} приводит к тому, что программа Factory Girl не оценивает код внутри фигурных скобок до тех пор, пока не будет создана the:valid_thing фабрика. Это заставит его подождать the:valid_user пока фабрика не будет загружена (Ваш пример не работает, потому что она еще не загружена), это также приведет к созданию new:valid_user для each:valid_thing вместо того, чтобы иметь того же пользователя для all:valid_thing's (что, вероятно, то, что вы хотите).

31
ответ дан 30 November 2019 в 00:00
поделиться

Попробуйте использовать метод ассоциации, например:

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  t.association :valid_user
end
4
ответ дан 30 November 2019 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: