在NodeJS

时间:2018-04-25 15:56:18

标签: node.js typescript jasmine spy

我在使用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类,它导出静态方法并监视它们。

问题

  • 我做错了吗?
  • 是否可以间谍(并替换)导出的功能?
  • 在课堂上使用静态方法(而不是导出功能)会起作用吗?
  • 还有其他方法吗?

0 个答案:

没有答案