使用.js脚本中的类进行笑话式单元测试,“ ReferenceError:[...]未定义”

时间:2019-09-03 11:01:40

标签: angular typescript unit-testing jestjs

我正在使用TypeScript,Angular和Jest编写应用程序。我正在使用JitsiMeetExternalAPI script(现在并不重要->我将使用vendorClass()进行简化)。该脚本包含一个我在组件中使用的类。看看下面的代码:

app.component.ts

import { Component, AfterViewInit } from '@angular/core';
import '../vendor/script.js';

declare const vendorClass: any;

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent implements AfterViewInit {

  vendorObject: any;

  constructor() {}

  ngAfterViewInit() {
    this.vendorObject= new vendorClass();
  }
}

此代码运行良好。 vendorObject已在应用程序运行时成功加载。 当我开玩笑地进行单元测试时,问题就来了。让我向您展示测试代码:

app.component.spec.ts

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AppComponent } from './app.component';

describe('AppComponent', () => {
  let fixture: ComponentFixture<AppComponent>;
  let component: AppComponent;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [AppComponent]}).compileComponents();
  }));

  test('AppComponent should be created', () => {

    // arrange
    fixture = TestBed.createComponent(AppComponent);
    component = fixture.componentInstance;

    // assert
    expect(component).toBeTruthy();
  });
});

测试导致错误:

ReferenceError: vendorClass is not defined

      17 |   
      18 |   ngAfterViewInit() {
    > 19 |     this.vendorObject= new vendorClass();
         |                            ^
      20 |   }
      21 |
      22 | }

我在这里遇到问题。测试不知道脚本和vendorClass。我正在寻找解决方案,该方法如何将第3方脚本和它的vendorClass注入到单元测试中,因此它应该可以识别该类,但到目前为止没有成功...

任何帮助都会很棒!

谢谢

卡米尔

更新

也许我应该征询从现在开始我尝试过的事情:

  1. 我在setupFiles中使用packe.json来在每次测试之前加载脚本:
[...]
"jest": {
  "preset": "jest-preset-angular",
  "setupFiles": [
    "<rootDir>/src/vendor/script.js"
  ],
  "setupFilesAfterEnv": [
    "<rootDir>/setupJest.ts"
  ]
}
[...]
  1. angular.json文件中设置测试脚本:
[...]
{
  [...]
  "projects": {
    "myProject": {
      [...]
      "architect": {
      [...]
        "test": {
          [...]
          "options": {
          [...]
          "scripts": ["/src/vendor/script.js"]
        }
      }
    }
  }
}
[...]
  1. 我将文件script.js导入了测试文件app.component.spec.ts中。

0 个答案:

没有答案