【问题标题】:Javascript Test - Verify if Authorization header is correct using axiosJavascript 测试 - 使用 axios 验证授权标头是否正确
【发布时间】:2017-01-16 20:53:21
【问题描述】:

我正在使用 axios 拦截器在请求标头中设置授权令牌。

axios.interceptors.request.use(config => {
  config.headers.Authorization = 'Bearer ' + Auth.getToken()
  return config
})

如何测试我的请求是否在标头中使用正确的令牌发送?

Ps.:我正在使用 Mocha + Chai

【问题讨论】:

    标签: javascript testing mocking sinon axios


    【解决方案1】:

    使用axios-mock-adapter模拟Axios,并从config对象中获取请求信息:

    .reply((config) => {})
    

    例子:

    import MockAdapter from 'axios-mock-adapter'
    
    const axiosMock = new MockAdapter(axios)
    
    axiosMock.onGet('https://api.com').reply((config) => {
        return [200, { requestHeaders: config.headers }]
    });
    
    const response = await axiosWrapper.get('https://api.com')
    expect(response.data.requestHeaders['Authorization'] === 'AUTH_TOKEN')
    

    要测试 正确 标记是否在标头中,集成测试会更合适。当标头中包含正确的令牌时,API 响应应该不同于向 API 发送不正确令牌时的响应。

    【讨论】:

    • 有什么方法可以在不入侵response.data的情况下做到这一点?
    • 以防万一您没有根据 axiosWrapper var 使用自定义 axios 实例(即 axios.create)并且不确定这是从哪里来的,您可以将 axiosWrapper 替换为默认 axios(即 axiosWrapper. get('api.com') 变成 axios.get('api.com'))。希望这可以帮助任何想知道答案中 axiosWrapper 来自哪里的人!
    【解决方案2】:

    如果想在响应中测试您的标头,您可以执行以下操作:

        const mock = new MockAdapter(axios);
        mock.onGet('/anon/getUser').reply(200, {/*response.data*/}, {'my-header-key': 'my-value' });
    

    【讨论】:

    • *response.data 在这里是可选的
    • 他想测试标题而不是模拟它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2019-05-30
    • 1970-01-01
    • 2013-08-18
    • 2017-11-23
    • 2017-08-18
    • 2018-08-13
    相关资源
    最近更新 更多