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

Posted

技术标签:

【中文标题】Jasmine - 监视在同一文件中调用的函数【英文标题】:Jasmine - Spy on a function that is called in same file 【发布时间】:2016-11-21 07:52:48 【问题描述】:

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

//fun.ts

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


export function fun2(): string
    return "Some message";

我有一个打字稿规范,它存根 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")
    );
);

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

Failures:
1) Stubing should stub the return value
1.1) Expected 'Some message' to equal 'A different message'.

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

【问题讨论】:

我无法重现这个。如果您添加expect(Fun.fun2()).toEqual("A different message"),您的测试是否通过? 我更新了问题以反映您的评论。 【参考方案1】:

我终于想通了。在 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";

现在当规范执行时,我看到了

.
1 spec, 0 failures

【讨论】:

感谢您发布此答案!完美运行。

以上是关于Jasmine - 监视在同一文件中调用的函数的主要内容,如果未能解决你的问题,请参考以下文章

Jasmine:监视一个名为 X 次的函数,并获得第 n 次调用

如何在 Jasmine 1 中监视 Falcor 数据模型构造函数

使用 Jasmine 监视私有变量的属性/函数

使用 Jasmine 监视 Backbone.js 路由调用

如何为 Jasmine 间谍的多个调用提供不同的返回值

使用 Jasmine 在 AngularJS 中测试去抖函数从不调用该函数