加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – RSPEC:如何测试控制器操作返回JSON Web令牌

发布时间:2020-12-17 02:08:03 所属栏目:百科 来源:网络整理
导读:我正在使用Devise和JWT来验证我正在编写的项目中的用户.我很难搞清楚如何编写一个有用的测试来期待一个JWT响应.因为每个都是加密的. 我唯一能想到的就是测试它们的结构是否应该是JWT(一个3段,’.’分隔的字符串). 有没有人遇到测试随机/散列回报并提出更好的
我正在使用Devise和JWT来验证我正在编写的项目中的用户.我很难搞清楚如何编写一个有用的测试来期待一个JWT响应.因为每个都是加密的.

我唯一能想到的就是测试它们的结构是否应该是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

解决方法

这实际上取决于你想要测试的内容.

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

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

虽然验证令牌包含的声明似乎更有用:

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中包含的确切声明.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读