如何在测试中模拟Angular 5中的js导入?

时间:2019-03-22 14:14:12

标签: angular unit-testing testing

我正在尝试为使用js导入的angular 5应用程序编写测试,我一直在进行研究,但我看不出要弄清楚如何模拟js导入。在测试中,我只想检查是否已使用spyOn调用了bar()方法,但不知道如何执行此操作。

import {foo} from 'fooProject';

export class Component {
 constructor(){}

 trigger() {
  foo.bar();
 }
}

1 个答案:

答案 0 :(得分:0)

一个选项是,您可以为foo创建工厂方法,然后在该模块的提供程序中注册该工厂。然后,在单元测试中,您可以注入所需的任何东西并伪造成员。

import {foo} from 'fooProject';

export function fooFactory(): any {
    return foo;
}

@NgModule({
    providers: [{ provide: 'Foo', useFactory: fooFactory }]
})
export class YourModule { }
import { Inject, Component } from '@angular/core';

export class YourComponent {
 constructor(@Inject('Foo') private foo:any){}

 trigger() {
  this.foo.bar();
 }
}