我是这个空间的新手所以请耐心等待。我正在Ionic 2项目中工作,所以它使用Angular 2,Typescript和Jasmine进行单元测试。我正在尝试为一个奇怪的案例编写一个单元测试。我有一个第三方库,我在一个组件中导入,其中导入位于顶部,如import * as thirdparty from "thirdparty-library"
,稍后我的组件会调用thirdparty.setup(someStuff, someMoreStuff, anotherFunc)
。
我真正要做的是让我自己的假thirdparty
模拟anotherFunc
,我从单元测试中传递出来。那么有没有办法在构造函数中传递一些东西并让它覆盖这个thirdparty
命名空间?提前谢谢
答案 0 :(得分:1)
作为一等公民的职能,可以分配新的价值。所以,如果你愿意,你可以随时做一些像
这样的事情let ogFunct;
beforeEach(() => {
ogFunt = thirdparty.setup;
thirdparty.setup = (arg1, arg2, arg3) => {
console.log(`arg1 - arg2 - arg2`)
}
});
afterEach(() => {
thirdparty.setup = ogFunct;
});
有时库类型定义会使函数成为只读。在这种情况下,您无法分配任何内容。也许在这种情况下,更好的选择是将第三方调用抽象为服务。只是嘲笑服务。你甚至可以考虑这样做。就个人而言,我认为更好的设计是在组件中直接使用第三方。