角度单元测试 - 注入失败[重复]
Posted
技术标签:
【中文标题】角度单元测试 - 注入失败[重复]【英文标题】:Angular unit testing - injection failing [duplicate] 【发布时间】:2021-05-25 22:13:28 【问题描述】:我正在尝试创建一个 Angular 单元测试,但马上就失败了。
我已经查看了this 和 this 这个 SO,这似乎正是我正在努力解决的问题,但在尝试了那里提到的修复后,我仍然不正确。
这是我的代码:
import TestBed from '@angular/core/testing';
import ContactsService from './contacts.service';
import HttpClientTestingModule from '@angular/common/http/testing';
import HttpClient from '@angular/common/http';
describe('ContactsService', () =>
beforeEach(() =>
TestBed.configureTestingModule(
imports: [ HttpClientTestingModule, ContactsService, HttpClient],
)
.compileComponents();
);
);
当我运行一个 ng 测试时,我得到了这个错误:
NullInjectorError: R3InjectorError(DynamicTestModule)[ContactsService -> HttpClient -> HttpClient]: NullInjectorError: 没有 HttpClient 的提供者!
我的 .ts,为了完整性:
import Injectable from '@angular/core';
import HttpClient, HttpHeaders from '@angular/common/http';
import Entry from '../classes/entry';
import EntrySearch from '../classes/entrySearch';
@Injectable(
providedIn: 'root'
)
export class ContactsService
constructor(private http: HttpClient)
【问题讨论】:
这个关于重复目标的答案完美回答:***.com/a/47261579/5468463 【参考方案1】:是的,就像 tilo 所说,它应该有效。
并尝试让你的beforeEach
- async()
。
试试这个 - 稍微修改一下(参见声明部分):
import TestBed from '@angular/core/testing';
import ContactsService from './contacts.service';
import HttpClientTestingModule from '@angular/common/http/testing';
describe('ContactsService', () =>
beforeEach(async(() =>
TestBed.configureTestingModule(
declarations: [ContactsService],
imports: [ HttpClientTestingModule]
)
.compileComponents();
));
);
【讨论】:
【参考方案2】:您只需要导入HttpClientTestingModule
并提供您的ContactsService
:
import ContactsService from './contacts.service';
import HttpClientTestingModule from '@angular/common/http/testing';
import TestBed from '@angular/core/testing';
describe('ContactsService', () =>
beforeEach(() => TestBed.configureTestingModule(
imports: [ HttpClientTestingModule ],
providers: [ ContactsService ]
));
it('should be created', () =>
const service: ContactsService = TestBed.inject(ContactsService);
expect(service).toBeTruthy();
);
);
【讨论】:
使用您的代码,我仍然遇到同样的错误。我是否正确假设我不必重建/重新启动 ng 测试? 你必须再次运行测试,sue。 是的,即使经过新的 ng 测试,我仍然收到“NullInjectorError: No provider for HttpClient!” 你用我上面提供的那个替换了你的整个测试类吗?如果没有,你能提供一个最小的演示吗? 是的,完全用你的替换了所有内容。我现在也将我的 ts 添加到问题中,如果它有帮助的话。以上是关于角度单元测试 - 注入失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章
对于单元测试中没有构造函数的扩展类,Angular 10 依赖注入失败
角度单元测试:失败:模块“DynamicTestModule”导入的意外值“DxTemplateHost”:添加@NgModule 注释