我使用茉莉花(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();
});