Тестирование приложения facebook canvas на rails (с использованием Koala) с помощью cucumber

#ruby-on-rails #tdd #cucumber

#ruby-on-rails #tdd #cucumber

Вопрос:

Как я могу подделать метод current_user, чтобы остановить сбой моих тестов cucumber?

Что-то вроде Given /^I am logged in$/ шага.

 class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :current_user

  def facebook_cookies
    @facebook_cookies ||= Koala::Facebook::OAuth.new.get_user_info_from_cookie(cookies)
  end

  def current_user
    @graph = Koala::Facebook::GraphAPI.new(facebook_cookies['access_token'])
    @current_user = User.find_by_fbid(@graph.get_object("me")["id"]) || User.create(:fbid => @graph.get_object("me")["id"]) 
  end

end
  

Ответ №1:

Я не знаком с Koala, но это некоторые идеи, которые я успешно использовал с другими фреймворками аутентификации.

  1. Определите current_user, чтобы он вел себя по-другому в тестовом режиме. Это немного некрасиво.

     class ApplicationController < ActionController::Base
      ...
      def current_user
        if Rails.env == 'test'
          User.create! :username => 'Tester'
        else
          # do normal stuff
        end
      end
      ..
    end
      
  2. Создайте шаг, который регистрирует пользователя для вас, и просто используйте его в начале каждого сценария

     Given /^I am logged in$/ do
      passwd = 'realgoodpassword'
      user = User.create! :username => 'Tester', :password => passwd
      visit login_path
      fill_in 'Username', :with => user.username
      fill_in 'Password', :with => passwd
      click_button 'Sign in'
    end
      

Предполагается, что вы используете Capybara для питания Cucumber. Webrat может выглядеть по-другому; загляните в features/step_definitions/web_steps.rb, чтобы получить некоторые идеи.

Комментарии:

1. Я хотел бы что-то вроде номера 2. Проблема в том, что для входа в систему нет имени пользователя или пароля, он полагается на файлы cookie.

2. 1 действительно уродлив, но на данный момент может быть выходом

3. «Проблема» с Capybara и подобными инструментами (например, Webrat) заключается в том, что они рабски пытаются скопировать опыт реального пользователя. Следовательно, они часто запрещают простые и очевидные способы тестирования, такие как доступ к контроллеру, запросу, файлам cookie или скрытым полям.