为Warden实现测试after_authentication



我有一个自定义的工作流程认证后,我想测试它。

在初始化器中,我得到了像

这样的东西
Warden::Manager.after_authentication do |user, auth, _opts|
next unless user.ban?
auth.logout
throw(:warden, :message => "You're currently ban. Impossible to connect")
end

我认为它阅读了整个文档,却没有找到正确的测试方法。任何想法?

我终于找到办法了。没那么明显。让我和你一起分享。

根据来源warden/hooks.rb#L71-L78

after_authentication只是对after_set_user的包装,它仅在通过身份验证路径设置用户时调用。选项和产生的参数与after_set_user中的相同。

这是我的解决方法。

describe Warden::Manager do
describe '#after_authentication' do
# add here the name of your config file, it's very important
let(:intializer_file_location) { 'config/initializers/warden.rb' }
subject do
after_authentication_proc.call(user, double_auth, opts)
end
let(:after_authentication_proc) do
p, _options = described_class._after_set_user.find do |p, opts|
opts[:event] == :authentication &&
p.source_location.first.include?(intializer_file_location)
end
p
end
let(:user) { create(:user) }
let(:opts) { {} }
let(:double_auth) { double(:double_auth) }
it 'does nothing' do
expect(subject).to be_nil
end
end
end

享受测试!😉

相关内容

  • 没有找到相关文章

最新更新