Использование определений шагов Factory Girl в функциях Cucumber (Rails 3) - PullRequest
7 голосов
/ 18 мая 2011

Я пытаюсь использовать Cucumber и Factory Girl. Следующие строки:

  Given I am not logged in
  And   the following user exists:
    | login  | email               | password   | confirmation |
    | user50 | user50@mydomain.com | secret50   | secret 50    | 
 ....

вызывает следующую ошибку:

Undefined step: "the following user exists:" (Cucumber::Undefined exception)
/home/user/RubymineProjects/project/features/sign_in.feature:9:in `And the following user exists:

You can implement step definitions for undefined steps with these snippets:
And /^the following user exists:$/ do |table|
  # table is a Cucumber::Ast::Table
  pending # express the regexp above with the code you wish you had
end

Я установил factory_girl_rails (даже функция дополнения кода RubyMine работает с шагом Factory Girl ...)

#Gemfile
group :test do
   gem "cucumber-rails", ">= 0.3.2"
   gem "factory_girl_rails"
 end

#features/support/env.rb
require 'factory_girl'
require 'factory_girl/step_definitions'

Есть идеи? Спасибо


Обновление: благодаря @ sj26 и @twmills я понял, что забыл создать фабрику: user с Factory Girl. Как только я его создал, все работало хорошо.

Ответы [ 4 ]

11 голосов
/ 07 ноября 2012

Для тех, кто пытается использовать помощников FactoryGirl сейчас:

Начиная с FactoryGirl 3.5.0 эти пошаговые помощники устарели и удалены в 4.0.0: http://robots.thoughtbot.com/post/25650434584/writing-better-cucumber-scenarios-or-why-were

Начиная с FactoryGirl 3.5.0, при использовании любого из созданных FactoryGirl определений шагов выводится предупреждение об устаревании.Мы полностью удалим определения шагов в выпуске 4.0.0 FactoryGirl в соответствии с SemVer.Я полагаю, что существующий код будет извлечен в жемчужину, похожую на обучающие колеса Cucumber Rails, с хорошим предупреждением, призывающим разработчиков не использовать эти шаги.следует использовать его в ваших собственных определениях шагов.

7 голосов
/ 19 мая 2011

Вы должны сначала включить ваши фабрики.factory_girl/step_definitions будет выполнять итерации по вашим определенным фабрикам, чтобы определить шаг для каждого.

Я использую это в features/support/factory_girl.rb:

# Require factories...
require 'spec/factories'

# Then define steps based on factories.
require 'factory_girl/step_definitions'
1 голос
/ 14 января 2013

Хорошо, я понял, что ThoughtBot хочет, чтобы мы писали лучший код, но в качестве обновления мы можем просто поместить этот старый файл в features / step_definitions:

https://raw.github.com/thoughtbot/factory_girl/3.6.x/lib/factory_girl/step_definitions.rb

1 голос
/ 18 мая 2011

Попробуйте это в features / step_definitions / user_steps.rb

Given /^the following user exists:$/ do |users|
  users.hashes.each do |user|
    Factory(:user,user)
  end
end

Хотя вместо этого вы можете захотеть:

Given /^the following users:$/ do |users|
  etc..
...