Factory_girl rspec провал теста с before_filter - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть вопрос новичка здесь.Я следовал учебному пособию по рельсам и наткнулся на препятствия в своих тестах.Когда я реализую следующий фильтр ...

class UsersController < ApplicationController
before_filter :authenticate, :only => [:edit, :update]

... все мои тесты user_controller_spec.rb, связанные с «GET edit» и «PUT update», начинают проваливаться там, где они были пройдены.Вот тот, который должен был возвращать true, но возвращать false:

describe "GET 'edit" do

 before(:each) do
   @user = Factory(:user)
   test_sign_in(@user)
 end

 it "should be successful" do
   get :edit, :id => @user
   response.should be_success
 end
end

И это мой код test_sign_in в spec_helper.rb

def test_sign_in(user)
 controller.sign_in(user)
end

Метод sign_in находится в SessionsHelper, который содержитв ApplicationController:

def sign_in(user)
 cookies.permanent.signed[:remember_token] = [user.id, user.salt]
 current_user = user
end

Я не знаю, как продолжить расследование.Я предполагаю, что, поскольку Rspec не смог «ПОЛУЧИТЬ редактирование», должен быть журнал этого запроса, который я могу просмотреть, но тест только говорит мне, что он вернул false.Где я могу посмотреть дальше?

Обновление: я обнаружил в log / test.log, что за каждой строкой 'Processing by UsersController # index as HTML' следует перенаправление следующим образом:

  Processing by UsersController#index as HTML
  [1m [35mUser Load (0.2ms) [0m  SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT 1
  Redirected to http://test.host/signin

Значит ли это, что за каждым действием тестового индекса следует перенаправление на вход?Если бы это было так, казалось бы, это согласуется с тестами, включая сбой метода test_sign_in (см. Выше) и другие тесты, подобные этому:

describe "GET 'index' for non-signed-in users" do     
  it "should deny access" do
    get :index
    response.should redirect_to(signin_path)
  end
end

Я попытаюсь снова обернуть голову вокруг метода test_sign_in.

1 Ответ

2 голосов
/ 21 декабря 2011

Вам нужно позвонить self в sign_in помощник.

def sign_in(user)
  cookies.permanent.signed[:remember_token] = [user.id, user.salt]
  self.current_user = user
end
...