Rails - Тестирование действия "edit" из ресурса в Cucumber + Capybara с включенным сеансом - PullRequest
0 голосов
/ 17 марта 2012

Я объявил это в маршрутах:

resources :lessons

И я пытаюсь создать тест для редактирования урока, используя следующую функцию:

Feature: Edit Lesson
  As a logged in user of the website
  I want to edit a lesson
  so I can change the values on it

    Scenario: I am signed in and I edit an existing lesson
      Given I am logged in
      And I access the edit lesson page
      When I edit an existing lesson with correct values
      Then I should see a lesson edited message

И затем явыполните следующие шаги:

def valid_user
  @user ||= { :name => "Testy McUserton", :email => "testy@userton.com",
    :password => "please", :password_confirmation => "please", :description => "I love to play soccer"}
end

Given /^I am logged in$/ do
  sign_up valid_user
end

Вот где у меня есть сомнения:

And /^I access the edit lesson page$/ do
  visit edit_lesson_path(???)
end

Путь к уроку редактирования ожидает идентификатор, поэтому я полагаю, что ядолжен «создать» урок, но для его создания необходим user_id текущего пользователя в сеансе.Как я должен делать это в огурце + капибара?Я использую Devise для управления аутентификацией, сессиями пользователей и т. Д.

Вот как я создаю новый урок и почему мне как-то нужен user_id:

def create
    @lesson = Lesson.new(params[:lesson])
    @lesson.user_id = current_user.id
    if @lesson.save
      redirect_to lesson_path(@lesson)
      flash[:notice] = "Congrats! Lesson has been created successfully."
    else
      render :action => "new"
    end
  end

1 Ответ

1 голос
/ 17 марта 2012

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

После этого вам нужно получить данные, которые вы хотите отредактировать

Пример кода может быть таким

Backgound:
 Given the following users:
  | email          | company_name   | role  | confirmed | pending |
  | admin@test.com | xyz            | admin | true      | false   |
@javascript
Scenario: Specifying company
 Given "xyz" has the following lesson:
  | name    |
  | lesson1 |
 And I access the edit lesson page
 When I edit an "lesson1" with correct values
 Then I should see a "lesson1" edited message

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

...