Помощь огурцам в Rails 3 - PullRequest
       11

Помощь огурцам в Rails 3

0 голосов
/ 17 августа 2010

Я очень плохо знаком с огурцом и rspec, но у меня есть кое-какие навыки и понимание рубина.

Рассматриваются следующие драгоценные камни: Devise, Declarative_Authorization и role_model

Rails 3 - это то, что я использую, и ruby ​​1.9.2-rc2

помни, я НЕ знаю, что делаю

Я написал особенность:

Feature: As the administrator of the site give me quick access to information
  In order to do lots of stuff
  As an administrator
  I want to see reports and stuff

  Background:
    Given a logged in user with a role of "admin"

  Scenario: Admin can see links
   Given I am on the admin dashboard page
   Then I should see all admin links

С некоторыми шагами в сети:

module AdminDashboardHelpers

  def current_user_session
    return @user_session if defined?(@user_session)
    @user_session = user_session
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.user
  end

  def admin_signed_in?
    @user = current_user
    @user.has_role?(:admin)
  end
end

World(AdminDashboardHelpers)


Given /^a logged in user with a role of "([^\"]*)"$/ do |role|
  visit new_user_session_path
  fill_in "Login", :with => "iam"
  fill_in "Password", :with => "secret"
  click_button "Log in"
  admin_signed_in?
  #@current_user.should has_role?(role)
end

Then /^I should see all admin links$/ do
  pending # express the regexp above with the code you wish you had
end

Моя проблема в том, что при запуске функции появляется сообщение об ошибке неопределенная локальная переменная или метод `user_session 'для #Cucumber :: Rails :: World: 0x8077e1f8

Я предполагал, что user_session - это метод, пришедший с devise. Как проверить, играет ли пользователь определенную роль?

Или еще лучше, как мне рассказать огурцу о методах, которые есть в приложении rails от gems? Спасибо за ваше время, это очень ценится. --iAm

1 Ответ

2 голосов
/ 18 августа 2010

Обычно вы не должны делать подобные тесты на огурец, это слишком высокий уровень.Обычно вы делаете это в своих спецификациях, а не в своих функциях.В огурце вы используете фиктивный браузер, поэтому вам не нужно настраивать все помощники и тому подобное.Просто зайдите в веб-приложение, как ваш пользователь, и войдите.стек должен делать все остальное .. Я использую devise, и вот способ, которым я настраиваю администратора.

Given /^I have one\s+administrator "([^\"]*)" with email "([^\"]*)" and password "([^\"]*)"$/ do |name,email, password|
  Administrator.new(:email => email,
                    :username=>name,
                    :password => password,
                    :password_confirmation => password).save!
end

Given /^I am an Authenticated Administrator$/ do
  name = 'admin'
  email = 'admin@inoc.net'
  password = 'secret!'

  Given %{I have one administrator "#{name}" with email "#{email}" and password "#{password}"}
  And %{I go to the administrator login page}
  And %{I fill in "administrator_username" with "#{name}"}
  And %{I fill in "administrator_password" with "#{password}"}
  And %{I press "Sign in"}
end

Given /^I have not authenticated as an+ "([^"]*)"$/ do |role|
     visit("/#{role}s/sign_out")
end

Что касается тестирования определенной роли, вы должны делать это в rspec, а не в огурце.Чтобы проверить в огурце, перейдите на страницу, которую может видеть только эта роль, и убедитесь, что вы можете ее видеть, затем проведите еще один тест, который переходит на страницу, которую вы не должны видеть, и убедитесь, чтоошибка, которую вы ожидаете.

...