Печально известный AbstractController :: ActionNotFound - Devise + Rails - PullRequest
0 голосов
/ 12 ноября 2011

Итак, я прочитал, как решить эту проблему:

Сбой теста RSpec пользовательского контроллера сеанса Devise завершается с помощью AbstractController :: ActionNotFound

и

http://lostincode.net/blog/testing-devise-controllers

Но в какой файл я добавляю эти изменения - моя проблема:

В папке rspec для моего

registrations_controller

Я пробовал это

before :each do
  request.env['devise.mapping'] = Devise.mappings[:user]
end

require 'spec_helper'

describe RegistrationsController do

  describe "GET 'edit'" do
    it "should be successful" do
      get 'edit'
      response.should be_success
    end
  end

end

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

EDIT

Так я тоже попробовал -

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

поэтому я создал папку со спецификацией / поддержкой и создал файл с именем controllers_macros.rb

module ControllerMacros
  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      sign_in Factory.create(:admin) # Using factory girl as an example
    end
  end

  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      user = Factory.create(:user)
      user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module
      sign_in user
    end
  end
end

А мой registrations_controller теперь такой:

require 'spec_helper'

describe RegistrationsController do

  describe "GET 'edit'" do
    before :each do
      request.env['devise.mapping'] = Devise.mappings[:user]
    end
    it "should be successful" do
      get 'edit'
      response.should be_success
    end
  end

end

У меня есть другие контроллеры в rspec. Нужно ли менять каждый из них? Или я запутался в том, где внести изменения.

1 Ответ

9 голосов
/ 12 ноября 2011

Просто возьмите первую версию, которую вы попробовали, но переместите блок before внутри первого блока описания следующим образом:

require 'spec_helper'

describe RegistrationsController do
  before :each do
    request.env['devise.mapping'] = Devise.mappings[:user]
  end

  describe "GET 'edit'" do
    it "should be successful" do
      get 'edit'
      response.should be_success
    end
  end
end
...