Estoy construyendo una rails 4 app. He creado un archivo de soporte para simular un inicio de sesión. Aquí están los archivos

spec/support/spec_test_helper.rb

module SpecTestHelper
  def login(user)
    request.session[:user_id] = user.id
  end

  def current_user
    User.find(request.session[:user_id])
  end
end

spec_helper.rb

config.include SpecTestHelper, :type => :controller

controlador de especificaciones

describe BooksController, "user role" do

  user = Fabricate(:user) do
    role { Role.find_by_account_type("user") }
  end

  login(user)
end

El archivo de soporte proporciona un método indefinido de error. Este es parte del mensaje de error:

spec/controllers/books_controller_spec.rb:27:in `block in <top (required)>': undefined method `login' for #<Class:0x007f9f83193438> (NoMethodError)

Estoy probando CanCan. Sé que la manera correcta de poner a prueba CanCan es la prueba de la Capacidad, sino que ya está hecho.

Favor de incluir el mensaje de error exacto.

OriginalEl autor Ricbermo | 2013-12-16

4 Comentarios

  1. 2

    Poner el login(user) llamada dentro de un before o un it bloque, en lugar de directamente dentro de la describe:

    let(:user) do
      Fabricate(:user) do
        role { Role.find_by_account_type("user") }
      end
    end
    
    before do
      login(user)
    end
    Sí! Muchas gracias ese era el problema.

    OriginalEl autor Ash Wilson

  2. 21

    He añadido esta línea en spec_helper.rb y funciona en 3 de los Rieles

    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

    Tal vez en otra (más bonito) existe una solución

    mi spec_helper.rb ya la tiene. Gracias
    así que presta atención en @Ash respuesta – usted realmente debe construir registros y llamar a métodos de/antes de la/…

    OriginalEl autor gotva

  3. 8

    No puede haber dos archivos en rspec dir: rails_helper.rb y spec_helper.rb. Si desea proporcionar apoyo para rieles dependiente de clases, se deben utilizar rails_helper decirle a rails para cargar los módulos en el 'spec/support' dir.

    Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

    Para declarar la compartida módulo, usted quiere usar en el interior del bloque de configuración.

    RSpec.configure do |config|
      ...
      config.include <YourModuleName>::<YourClassName>, :type => :controller
      ...
    end

    Pero, si tu clase no requieren barandas en todos, usted puede cargar bajo spec_helper, que no se carga de rieles para ejecutar las pruebas.
    Consulte esta respuesta y esta referencia para aprender más sobre él.

    OriginalEl autor Saulo Aguiar

  4. 3

    Alternativa a la respuesta proporcionada por @gotva. Es un poco más detallado, pero funciona en ambos Carriles 3 y 4:

    Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f} 

    OriginalEl autor alexs333

Dejar respuesta

Please enter your comment!
Please enter your name here