我正在开发一个API应用程序,我使用Devise登录Cinema所有者来更新和编辑Cinema的广告牌。
我在使用MiniTest进行简单测试时遇到了一个错误:
test "should get index" do
sign_in users(:one)
get movies_url, as: :json
assert_response :success
end
Minitest::UnexpectedError: ActionDispatch::Request::Session::DisabledSessionError: Your application has sessions disabled. To write to the session you must first configure a session store
test/controllers/movies_controller_test.rb:11:in `block in <class:MoviesControllerTest>'
test/controllers/movies_controller_test.rb:11:in `block in <class:MoviesControllerTest>'
我已经在Github上搜索了这个问题,并尝试在application.rb中添加以下内容:
config.session_store :cookie_store, key: '_interslice_session'
config.middleware.use ActionDispatch::Cookies
config.middleware.use config.session_store, config.session_options
我也试着去修复
module RackSessionFixController
extend ActiveSupport::Concern
class FakeRackSession < Hash
def enabled?
false
end
end
included do
before_action :set_fake_rack_session_for_devise
private
def set_fake_rack_session_for_devise
request.env['rack.session'] ||= FakeRackSession.new
end
end
end
但也不管用。请注意,只有在使用MiniTest进行单元测试时才会发生这种情况。我正在测试一个控制器(电影),其中需要登录才能进行任何操作(如创建,更新和删除)。
1条答案
按热度按时间xa9qqrwz1#
我经历过这个问题。在我的例子中,是密码重置后的自动签名过程导致了错误。我尝试了你描述的所有解决方案,和你一样,它从来没有为我工作。下面是我如何轻松地解决我的问题,并保留API only模式。
如果在这种特殊情况下,问题与自动签名没有直接关系,那么简单地将会话添加到路由就足够了。