失败:this.translate.get 不是一个函数(单元测试)

问题描述 投票:0回答:1

我在 Angular 中进行了单元测试,但收到此错误:

TypeError: this.translate.get is not a function
    at TranslatePipe.updateValue (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@ngx-translate/core/__ivy_ngcc__/fesm2015/ngx-translate-core.js:1126:1)
    at TranslatePipe.transform (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@ngx-translate/core/__ivy_ngcc__/fesm2015/ngx-translate-core.js:1167:1)
    at ɵɵpipeBind1 (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/fesm2015/core.mjs:22464:1)
    at LoginPageComponent_Template (ng:///LoginPageComponent.js:228:33)

我该如何解决这个问题?我已经在导入中添加了

TranslateModule.forRoot()
,但它不起作用。这是我的测试的样子:

const mockTranslateService = jasmine.createSpyObj('TranslateService', ['use']);

beforeEach(() => {

    TestBed.configureTestingModule({
      declarations: [LoginModalComponent],
      imports: [
        CommonModule,
        BrowserModule,
        TranslateModule.forRoot(),
        ReactiveFormsModule,
        UpgradeModule,
      ],
      providers: [
        { provide: TranslateService, useValue: mockTranslateService },
        /*Other services here...*/
      ],
    }).compileComponents();

    fixture = TestBed.createComponent(LoginModalComponent);
    component = fixture.componentInstance;
  });

我根本不使用

get
方法,但我确实使用
use
方法,并且在我的 html 中我使用翻译管道。

<span class="close-button">{{ 'COMMON.CLOSE' | translate }}</span>

这是我的组件:

constructor(
    private myService: MyService,
    private translateService: TranslateService
  ) {}

ngOnInit(): void {
    const subscription = 
      this.myService.fetchLanguage().subscribe((info) => {
      this.translateService.use(info.language.toLowerCase());
    });

    this.subscriptions.push(subscription);
  }
angular ngx-translate
1个回答
0
投票

如果您看到堆栈跟踪,您就会知道

TranslatePipe
使用了 get 方法。我发现你在嘲笑
TranslateService

{ provide: TranslateService, useValue: mockTranslateService },

但是您在创建模拟时没有添加 get 方法。请尝试在模拟函数列表中添加

get
方法:

const mockTranslateService = jasmine.createSpyObj('TranslateService', ['use', 'get']);
© www.soinside.com 2019 - 2024. All rights reserved.