首页 > 解决方案 > 如何在测试中模拟 Angular 5 中的 js 导入?

问题描述

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

import {foo} from 'fooProject';

export class Component {
 constructor(){}

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

标签: angularunit-testingtesting

解决方案


一种选择是您可以创建一个工厂方法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();
 }
}

推荐阅读