Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rspec不使用设计用户身份验证_Ruby On Rails_Rspec_Devise - Fatal编程技术网

Ruby on rails rspec不使用设计用户身份验证

Ruby on rails rspec不使用设计用户身份验证,ruby-on-rails,rspec,devise,Ruby On Rails,Rspec,Devise,我试图使用RSpec测试我的rails应用程序,它使用designe用户身份验证gem 以下是已捆绑的相关宝石列表: devise (3.4.1) rails (4.1.7, 4.1.6) rspec (3.1.0) rspec-core (3.1.7) rspec-expectations (3.1.2) rspec-mocks (3.1.3) rspec-rails (3.1.0) rspec-support (3.1.2) 根据DEVICE和rspec的文件,我有一个spec/contr

我试图使用RSpec测试我的rails应用程序,它使用designe用户身份验证gem

以下是已捆绑的相关宝石列表:

devise (3.4.1)
rails (4.1.7, 4.1.6)
rspec (3.1.0)
rspec-core (3.1.7)
rspec-expectations (3.1.2)
rspec-mocks (3.1.3)
rspec-rails (3.1.0)
rspec-support (3.1.2)
根据DEVICE和rspec的文件,我有一个spec/controller/feed\U controller\U spec.rb,如下所示:

require 'rails_helper'

RSpec.describe FeedController, :type => :controller do

  before(:each) do
    devise_setup
  end

  it "blocks unauthenticated access" do
    get :index
    response.should redirect_to(new_user_session_path)
  end

  it "allows authenticated access" do
    user = User.create!(:foo => 'bar', ...)
    sign_in user
    get :index
    expect(response).to be_success
  end
end
在我的spec/support/controller_macros.rb文件中:

module ControllerMacros
  def devise_setup
      allow(request.env['warden']).to receive(:authenticate!).and_throw(:warden, {:scope => :user})
      allow(controller).to receive(:current_user).and_return(nil)
  end

  def sign_in(user)
    if user.nil?
      allow(request.env['warden']).to receive(:authenticate!).and_throw(:warden, {:scope => :user})
      allow(controller).to receive(:current_user).and_return(nil)
    else
      allow(request.env['warden']).to receive(:authenticate!).and_return(user)
      allow(controller).to receive(:current_user).and_return(user)
    end
  end
end
最后但并非最不重要的一点是,我的spec/spec_helper.rb文件添加了以下行(在使用rails generate rspec:init命令创建的文件顶部):

在命令行上运行bundle exec rspec时,我收到以下错误:

/.../spec/spec_helper.rb:6:in `block in <top (required)>': uninitialized constant ControllerMacros (NameError)
    from /usr/local/lib/ruby/gems/2.1.0/gems/rspec-core-3.1.7/lib/rspec/core.rb:81:in `configure'
    from /home/vagrant/code/pulse/spec/spec_helper.rb:4:in `<top (required)>'
/…/spec/spec\u helper.rb:6:in'block-in':未初始化的常量controllermacro(NameError)
from/usr/local/lib/ruby/gems/2.1.0/gems/rspec-core-3.1.7/lib/rspec/core.rb:81:in“configure”
from/home/vagrant/code/pulse/spec/spec\u helper.rb:4:in`'
当我从spec_helper.rb文件中注释掉ControlMacros行时,它给出了以下内容:

1) FeedController blocks unauthenticated access
   Failure/Error: devise_setup
   NameError:
     undefined local variable or method `devise_setup' for #<RSpec::ExampleGroups::FeedController:0xba5d20f4>
   # ./spec/controllers/feed_controller_spec.rb:9:in `block (2 levels) in <top (required)>'

2) FeedController allows authenticated access
   Failure/Error: devise_setup
   NameError:
     undefined local variable or method `devise_setup' for #<RSpec::ExampleGroups::FeedController:0xba5c76a4>
   # ./spec/controllers/feed_controller_spec.rb:9:in `block (2 levels) in <top (required)>'
1)FeedController阻止未经验证的访问
失败/错误:设计\u设置
名称错误:
未定义的局部变量或“设计设置”方法#
#./spec/controllers/feed\u controller\u spec.rb:9:in“块(2级)in”
2) FeedController允许经过身份验证的访问
失败/错误:设计\u设置
名称错误:
未定义的局部变量或“设计设置”方法#
#./spec/controllers/feed\u controller\u spec.rb:9:in“块(2级)in”

似乎您需要
要求“支持/控制器\u宏”
spec/support
子目录中的文件是自动加载的,但不是必需的。

在rails助手中取消注释/添加此行:

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