首页 > 解决方案 > 如何使用 jest.spyOn 函数来测试另一个文件中的函数

问题描述

我正在尝试运行测试用例来测试我的 Web 服务的入口点,我在运行单元测试时遇到了一个问题。无法监视异步函数,因为它是属性而不是函数。

我正在尝试测试是否在 server.js 文件中调用了 run 函数

入口文件有点像下面。


    import config from 'config';

    export default async function run() {
      try {
       /*
         some code
       */
      } catch (err) {
        process.exit(1);
      }
    }

    run();

测试文件如下


    import run from '../server';
    describe('server-test', () => {
    it('run', async () => {
        const start = require('../server');
        const spy = jest.spyOn(start, run);
        await run();
        expect(spy).toBeCalled();
      });
    });

测试应该可以正常运行,但是在运行此测试时出现以下错误

Cannot spy the async function run() {

    try {
            /*
             some code.
            */
          } catch (err) {
            process.exit(1);
          }
        } property because it is not a function; undefined given instead

标签: node.jsjestjsspyon

解决方案


我为此错误研究了很长时间,并在以下帖子中结束了 如何使用 Jest 监视默认导出的函数?

因此,在不放弃 default 关键字(即 ES 6 lint 所需)的情况下,唯一的解决方案是使用 'default' 词代替 'run'。

有点像这样使用。

const spy = jest.spyOn(start, 'default');

它应该工作。


推荐阅读