如何解决TESTBED.inject 无法读取 null
我想测试一个将脚本注入到 Angular 组件或页面文档中的 Angular 服务
这是我的服务:
import { Injectable,Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Injectable()
export class NgxToolsLoadService {
constructor(@Inject(DOCUMENT) private document: any) {}
load(
src: string,): void {
let el = this.document.createElement('script');
el.src=sec;
this.document.getElementsByTagName('head')[0].appendChild(el);
}
}
这是我的 jest.config
module.exports = {
preset: "ts-jest",testEnvironment: "node",onlyChanged: true,collectCoverage: false,moduleDirectories: ["node_modules","types"],modulefileExtensions: ["ts","tsx","js","jsx","json","node"],transform: {
"^.+\\.(t|j)sx?$": "ts-jest",},};
我尝试将 testEnvironment
更改为 jsdom,但出现错误:Exceeded timeout of 5000 ms for a test
并且此代码没有帮助
jest.setTimeout(100000);
jest.usefaketimers('legacy');
现在我正在使用 testEnvironment: node
然而,这些是我的测试试验
// myservice.service.spec.ts
import { test,expect,afterall,beforeEach,jest } from '@jest/globals';
import { Testbed } from '@angular/core/testing';
import { MyService} from './myservice.service';
import { DOCUMENT } from '@angular/common';
let service: MyService;
beforeEach(async () => {
await Testbed.configureTestingModule({
providers: [MyService,{ provide: Document,useExisting: DOCUMENT }],});
service= Testbed.inject(MyService);
});
test('service should be created',() => {
expect(ngxToolsLoadService).toBeTruthy();
});
测试失败,无法创建服务 我收到了这个错误
ReferenceError: StaticInjectorError(DynamicTestModule)[NgxToolsLoadService -> InjectionToken DocumentToken]:
StaticInjectorError(Platform: core)[NgxToolsLoadService -> InjectionToken DocumentToken]:
document is not defined
解决方法
通过在 jest.config.js
文件中使用 jest-preset-angular 而不是 ts-jest 解决
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。