如何在Angular Pipe Unit Test中模拟注入的依赖项

时间:2019-03-07 10:43:52

标签: angular unit-testing angular-pipe angular-upgrade

我目前正在自学Angular成为一名编码员,并且对所开发的应用程序有疑问。我已经建立了一个管道来检查是否已启用用户功能

import { Inject, Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'hasFeature'
})
export class HasFeaturePipe implements PipeTransform {

  private $user: any;

  constructor(@Inject('$user') $user) {
    this.$user = $user;
  }

  transform(value: any, args?: any): any {
    return this.$user.hasFeature(value);
  }
}

'$ user'是在我构建并与Angular APP合并的AngularJS应用程序中定义的,因此它有点像我正在构建的混合应用程序。我已经将$ user包装在一个小的提供程序包装器中,该包装器添加到app.module.ts文件的providers数组中。这是包装器的内容:

const userService = ($injector: any) => $injector.get('$user');

export const ANGULARJS_SERVICES = [{
    provide: '$user',
    useFactory: userService,
    deps: ['$injector']
  }];

这就是我如何在app.module.ts文件中使用它 提供者:[I18N_PROVIDERS]。现在,我不确定如何将$ user依赖项添加到管道测试中以及如何正确测试,这是我到目前为止所拥有的:

const mock$user = {hasFeature: (value) => {value === 'featureOK'}};

describe('HasFeaturePipe', () => {
  it('create an instance', () => {
    const pipe = new HasFeaturePipe('n/a');
    expect(pipe).toBeTruthy();
  });

  describe('hasFeature', () => {
    it('should', inject(['$user'], (mock$user) => {
      const pipe = new HasFeaturePipe('featureOK');
      expect(pipe).toBeTruthy(true);
    }))
  });
}); 

自然这是行不通的,并且出现错误“ 类型'string []'无法分配给类型'InjectionToken <(done:DoneFn)=> void>'。     类型'string []'中缺少属性'_desc'。

有人可以帮忙解释一下如何解决我的问题吗?该管道在应用程序中可以正常工作,但我必须是一名优秀的开发人员并测试我的所有代码。预先感谢。

0 个答案:

没有答案