最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

rspec - Devise gem error in test environment: serialize_from_session gives error "wrong number of arguments (given 10,

programmeradmin6浏览0评论

I just updated my app to rails 8 with the newest version of Devise and hotwire turbo. When running tests with Capybara/Rspec I'm seeing certain form submissions fail with a 500 error from inside of Devise. This behavior seems to be only in the test environment. Here are the versions I'm using:

  • Ruby [3.3.6]
  • Rails [8.0.0]
  • Devise [4.9.4]

The error is coming from lib/devise.rb:496

def self.configure_warden! #:nodoc:
  @@warden_configured ||= begin
    warden_config.failure_app   = Devise::Delegator.new
    warden_config.default_scope = Devise.default_scope
    warden_config.intercept_401 = false

    Devise.mappings.each_value do |mapping|
      binding.pry
      warden_config.scope_defaults mapping.name, strategies: mapping.strategies

      warden_config.serialize_into_session(mapping.name) do |record|
        mapping.to.serialize_into_session(record)
      end

      warden_config.serialize_from_session(mapping.name) do |args|
        mapping.to.serialize_from_session(*args)
      end
    end

    @@warden_config_blocks.map { |block| block.call Devise.warden_config }
    true
  end
end

When mapping.to.serialize_from_session(*args) is called I get the error "wrong number of arguments (given 10, expected 2)".

I have not been able to find a pattern between tests that pass and tests that cause this behavior except that I can see the data is different.

On a passing test args looks like this:

[[1], "$2a$04$yPg9CBmwVeIZc3VYqdmL3O"]

But on a failing test args looks like this:

{
    "id"=>27,
    "email"=>"[email protected]",
    "created_at"=>"2000-01-01T05:00:03.000Z",
    "updated_at"=>"2000-01-01T05:00:19.000Z",
    "client_id"=>18,
    "role"=>"coordinator",
    "authentication_token"=>"pxcFTApxeyCo1evMNd9X",
    "first_name"=>"User12",
    "last_name"=>"Name",
    "analytics_enabled"=>false
}

What could be causing this? Looks like a hash composed of a full user record instead of just an id and token.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论