unit-testing - 如何通过 JEST 检测模拟依赖库中的调用?

标签 unit-testing vue.js testing jestjs vue-test-utils

我有一个名为“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 set 方法是否被调用了 'error' 和 'some-error'。我怎样才能在我的测试中做到这一点?

现在我已经像下面那样模拟了 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')
})

问候

最佳答案

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

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

关于unit-testing - 如何通过 JEST 检测模拟依赖库中的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396600/

相关文章:

python - 运行 Python unittest,以便在成功时不打印任何内容,仅在失败时打印 AssertionError()

用于单元测试的 C# 通用存储库

vue.js - GitHub 页面 - 现场出现意外 token '<',本地没有问题

vue.js - 如何传递对象vuejs

c++ - 测试 child 的方法是否已重载

oop - 将接口(interface)对象传递给构造函数或方法

asp.net-mvc - 模拟 HttpPostedFileBase 和 InputStream 进行单元测试

c# - 验证对象在 Rhino Mocks 中调用自身

javascript - 属性或方法 "orgs"未在实例上定义,但被引用

java - 使用 HttpUnit 发送带有 POST 请求的文件