使用茉莉花和业力进行测试时,在测试规范中未定义声明的全局范围变量

时间:2018-08-08 06:18:01

标签: angular testing jasmine components karma-runner

我在要使用的同一文件中创建了一个带有全局变量声明的Injectable。我能够在代码中正常工作。但是在我的测试中,声明失败并出现未定义的错误。

declare var myGlobal;

@Injectable()
export class HttpService {
  constructor() {
    console.log(myGlobal);
  }
}

我正在测试组件,该服务需要作为测试平台中组件测试的提供者。

以下是它的称呼方式:

    @Component({
    ...
    })
    export class AppComponent {
    constructor(_h: HttpService) {

    }
    ngOnInit(): void {
        this._h.fileUrl = window.location.href;
        this.getSettings(this._h.settingsSrc);
    }
}

以下是测试中服务的声明

beforeEach(async(() => {
    const settingsFile = 'json';
    TestBed.configureTestingModule({
      declarations: [
        AppComponent,
        MenubarComponent,
      ],
      imports: [
        HttpClientModule,
      ],
      providers: [
        HttpService
      ],
    }).compileComponents();}))


it('getSettings() tests', inject([HttpService], async(async (_h: HttpService) => {
     const cmp = new AppComponent(_h);
     await cmp.ngOnInit(); // this is where the service function is trigered
}))

我见过这个Varaible declared is not defined in spec while testing,但没有帮助。

1 个答案:

答案 0 :(得分:2)

您可以在测试文件中声明全局变量

const global = "something";

describe('My test suit', function() {
...
});

或将已定义的Javascript文件添加到您的 karma.conf.js 文件中:

//要在浏览器中加载的文件/模式列表

files: [
   ...,
   'global-variable.js'
],