我在使用Jasmine监视NodeJS(v9.6.1)应用程序中的导出函数时遇到了麻烦。
应用程序是用typescript编写的,用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文件中的Bar类:
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类,它导出静态方法并监视它们。