首页 > 解决方案 > 如何检测 JEST 在模拟的依赖库中的调用?

问题描述

我有一个名为“api”的模块。它是一个带有定义拦截器的 axios 对象,如下所示:

import axios from 'axios'
import VueCookie from 'vue-cookie'

const api = axios.create(...)
api.interceptors.response.use(config => { ... }, error => {
   if (error.response.data.error === 'some-error') {
       VueCookie.set('error', 'some-error')
   }
})

export default api

现在我想检测是否使用“错误”和“某些错误”调用了 VueCookie 设置方法。我怎样才能在我的测试中做到这一点?

现在我已经像下面那样模拟了 VueCookie,但我不知道如何访问这个模拟并在其上触发 expect().toHaveBeenCalledWith()。下面的解决方案不起作用。

const cookies = jest.mock('vue-cookie', () => {
            return {
                get: (key) => {
                    const cookies = {
                        timezone: 'Warsaw',
                        jwt: 'foo'
                    }

                    return cookies[key]
                }
            }
        })

...

it('test', () => {
    // calling interceptor
    expect(cookies.set).toHaveBeenCalledWith('error', 'some-error')
})

问候

标签: unit-testingvue.jstestingjestjsvue-test-utils

解决方案


如果我理解正确的话,应该验证的不是对象cookiesset方法。cookies所以我建议用

it('test', () => {
    // calling interceptor
    expect(cookies.set).toHaveBeenCalledWith('error', 'some-error')
})

推荐阅读