茉莉花间谍在nodejs上的导出功能上



我使用茉莉花(v9.6.1(应用程序中的导出功能很难使用茉莉花。

该应用程序用打字稿编写,用TSC在DIST文件夹中以JavaScript执行。

执行。

应用

我有一个导出函数的foo utils文件(foo.utils.ts(:

import {readFile} from "fs";
export function getData(filePath: string){
    const data = readFile(filePath)
    // various checks happens here.
    return data;
}

和bar.ts文件中的酒吧类:

import {getData} from "../utils/foo.utils
export class Bar {
        public do(){
    // ... does stuff
    const data = getData(filePath);
    // etc.
    }
}

测试

现在,我正在尝试间谍导出的getData方法,以检查是否被调用并返回模拟的值。我不想在我的单元测试中读取文件(甚至根本使用真正的getData方法(

bar.spec.ts文件用于测试:

describe("Bar", ()=>{
    let bar: Bar;
    beforeEach(function() {
        bar = new Bar();
    })
    it(" should do stuff", ()=>{
        const spy = spyOn(???, "getData").and.returnValue([]);
        bar.do();
        expect(spy).toHaveBeenCalled();
    })
});

问题

由于它是一个nodejs应用,我一直在尝试使用 global作为监视的对象,但是我得到了错误:

错误:: GetAttachementData((方法不存在

我也尝试添加

import * as fooutils from ".../src/utils/foo.utils

和间谍fooutils,但我仍然通过导出的功能(当它试图读取文件时崩溃...(

现在我有点迷路了。据我发现,实际上不可能模拟导出功能(即使应该添加到global对象中(。我考虑过重构Utils文件以创建一个导出静态方法和监视它们的Utils类。

问题

  • 我做错了什么吗?
  • 可以监视(和替换(导出功能吗?
  • 在类中使用静态方法(而不是导出功能(工作?
  • 其他任何方法?

您可以将getData包装在对象{ getData }中,并按照以下方式编写单元测试。

import { getData } from "../utils/foo.utils";
...
it(" should do stuff", () => {
  const spy = spyOn({ getData }, "getData").and.returnValue([]);
  bar.do();
  expect(spy).toHaveBeenCalled();
});

最新更新