我在要使用的同一文件中创建了一个带有全局变量声明的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,但没有帮助。
答案 0 :(得分:2)
您可以在测试文件中声明全局变量
const global = "something";
describe('My test suit', function() {
...
});
或将已定义的Javascript文件添加到您的 karma.conf.js 文件中:
//要在浏览器中加载的文件/模式列表
files: [
...,
'global-variable.js'
],