使用Jasmine和Ionic有一种模拟/存根静态命名空间函数调用的方法吗?

时间:2016-11-10 20:40:14

标签: angular typescript jasmine ionic2

我是这个空间的新手所以请耐心等待。我正在Ionic 2项目中工作,所以它使用Angular 2,Typescript和Jasmine进行单元测试。我正在尝试为一个奇怪的案例编写一个单元测试。我有一个第三方库,我在一个组件中导入,其中导入位于顶部,如import * as thirdparty from "thirdparty-library",稍后我的组件会调用thirdparty.setup(someStuff, someMoreStuff, anotherFunc)

我真正要做的是让我自己的假thirdparty模拟anotherFunc,我从单元测试中传递出来。那么有没有办法在构造函数中传递一些东西并让它覆盖这个thirdparty命名空间?提前谢谢

1 个答案:

答案 0 :(得分:1)

作为一等公民的职能,可以分配新的价值。所以,如果你愿意,你可以随时做一些像

这样的事情
let ogFunct;

beforeEach(() => {
  ogFunt = thirdparty.setup;
  thirdparty.setup = (arg1, arg2, arg3) => {
    console.log(`arg1 - arg2 - arg2`)
  }
});

afterEach(() => {
  thirdparty.setup = ogFunct;
});

有时库类型定义会使函数成为只读。在这种情况下,您无法分配任何内容。也许在这种情况下,更好的选择是将第三方调用抽象为服务。只是嘲笑服务。你甚至可以考虑这样做。就个人而言,我认为更好的设计是在组件中直接使用第三方。