Как использовать Cucumber / Factory Girl с постоянными ролями - PullRequest
0 голосов
/ 31 июля 2011

Я использую db/seeds.rb, чтобы заполнить мою базу данных двумя пользовательскими ролями («Администратор», «Пользователь»), которые никогда не изменятся. Однако, когда я запускаю тесты, начальные данные не переносятся, и результаты являются ошибочными.

Когда я пытаюсь запустить огурец, я получаю следующую ошибку:

Использование профиля по умолчанию ... Характеристика: Войдите, чтобы получить доступ Для защищенных разделов сайта Действительный пользователь должен иметь возможность войти

Сценарий: пользователь не зарегистрирован # features / users / sign_in.feature: 6 не зарегистрировано: роль (ArgumentError) * +1010 * /Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl/registry.rb:15:in find'<br> /Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl.rb:39:in factory_by_name '
/Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl/syntax/vintage.rb:53:in default_strategy'<br> /Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl/syntax/vintage.rb:146:in Factory '
/Users/x/rails/ply_rails/features/support/db_setup.rb:6:in `Перед» Учитывая, что я не вошел в # Особенности / step_definitions / user_steps.rb: 36

Вот как выглядит моя установка:

# features/support/db_setup.rb
Before do
  # Truncates the DB before each Scenario,
  # make sure you've added database_cleaner to your Gemfile.
  DatabaseCleaner.clean

  Factory(:role, :name => 'Admin')
  Factory(:role, :name => 'User')
end



# features/users/sign_in.feature
Feature: Sign in
  In order to get access to protected sections of the site
  A valid user
  Should be able to sign in

    Scenario: User is not signed up  # THIS IS LINE 6
      Given I am not logged in
      And no user exists with an email of "user@user.com"
      When I go to the sign in page
      And I sign in as "user@user.com/password"
      Then I should see "Invalid email or password."
      And I go to the home page
      And I should be signed out



# features/step_definitions/user_steps.rb
Given /^I am a "([^"]*)" named "([^"]*)" with an email "([^"]*)" and password "([^"]*)"$/ do |role, name, email, password|
  User.new(:name => name,
            :email => email,
            :role => Role.find_by_name(role.to_s.camelize),
            :password => password,
            :password_confirmation => password).save!
end

Не уверен, с чего начать, чтобы это заработало, спасибо за вашу помощь / время!

1 Ответ

0 голосов
/ 31 июля 2011

Ну, суть тестов - начать с чистой базы данных, то есть с согласованного состояния, поэтому хорошо, что все стирается.

Во-вторых, с точки зрения огурца, вы должны определить фон.блок, чтобы сделать настройку.Это будет выполняться для каждого сценария и имеет преимущество в том, что каждое действие явно известно.Это особенно полезно, если вы используете простой текст сценария огурца для показа клиентам.Таким образом, вы должны сделать что-то вроде:

Background:
    Given that the role "Admin" exists
    And that the role "User" exists

Scenario:
    etc

И сделать пользовательские шаги для that the role [blank] exists, который создаст для вас роль.

...