gpt4 book ai didi

ruby-on-rails - RSPEC:如何测试 Controller 操作是否返回了 JSON Web token

转载 作者:行者123 更新时间:2023-12-04 06:35:30 26 4
gpt4 key购买 nike

我正在使用 Devise 和 JWT 来验证我正在编写的项目中的用户。我很难弄清楚如何编写一个有用的测试来期待 JWT response.body (因为每个都是加密的)。

我唯一能想到的就是测试它们的结构是否应该是 JWT(一个 3 段,'.' 分隔字符串)。

有没有人遇到过测试随机/散列返回并提出更好的解决方案?

describe SessionTokensController, type: :controller do
let(:current_user) { FactoryGirl.create(:user) }

before(:each) do
sign_in current_user
end

describe '#create' do
it 'responds with a JWT' do
post :create
token = JSON.parse(response.body)['token']

expect(token).to be_kind_of(String)
segments = token.split('.')
expect(segments.size).to eql(3)
end
end
end

最佳答案

这真的取决于你到底想测试什么。

如果您只是想测试返回的 token 是否存在且有效,您可以执行以下操作:

it 'responds with a valid JWT' do
post :create
token = JSON.parse(response.body)['token']

expect { JWT.decode(token, key) }.to_not raise_error(JWT::DecodeError)
end

尽管验证 token 包含的声明似乎更有用:
let(:claims) { JWT.decode(JSON.parse(response.body)['token'], key) }

it 'returns a JWT with valid claims' do
post :create
expect(claims['user_id']).to eq(123)
end

在后一个示例中,您可以验证包含在 JWT 中的确切声明。

关于ruby-on-rails - RSPEC:如何测试 Controller 操作是否返回了 JSON Web token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com