Jasmine - 监视在同一文件中调用的函数

car*_*ase 4 testing unit-testing node.js jasmine typescript

这困扰了我一段时间。我在同一个文件中有两个函数。

//fun.ts

export function fun1(){
    let msg = fun2();
    return msg;
}

export function fun2(): string{
    return "Some message";
}
Run Code Online (Sandbox Code Playgroud)

我有一个打字稿规范,它存根 fun2 并调用 fun1。

//fun.spec.ts

import * as Fun from 'fun';

describe('Stubing', () => {
    it('should stub the return value', () => {
        spyOn(Fun, 'fun2').and.returnValue("A different message");

        expect(Fun.fun1()).toEqual("A different message")
    });
});
Run Code Online (Sandbox Code Playgroud)

但是当我运行规范时,我得到的输出是

Failures:
1) Stubing should stub the return value
1.1) Expected 'Some message' to equal 'A different message'.
Run Code Online (Sandbox Code Playgroud)

我用打字稿编写了测试,然后我有一个 gulp 脚本,它成功地转换并运行了 jasmine 规范。一切正常,我唯一想不通的是为什么间谍不工作。一个解释将不胜感激。

car*_*ase 6

我终于想通了这一点。在 fun.ts 中,我直接调用了 fun2 对象,但我的 Jasmine 规范无法访问该对象。Jasmine 规范可以访问的唯一对象是导出对象。如果我想让间谍工作,我需要在导出对象上调用 fun2。

//fun.ts
export function fun1(){
    let msg = exports.fun2();
    console.log(msg);
}

export function fun2(): string{
    return "Some message";
}
Run Code Online (Sandbox Code Playgroud)

现在当规范执行时我看到

.
1 spec, 0 failures
Run Code Online (Sandbox Code Playgroud)

  • 感谢您发布此答案!工作完美。 (2认同)