javascript - 错误:需要先调用TestBed.initTestEnvironment()
问题描述
我正在尝试对服务的角度进行测试。
这是我的部分代码
describe('AddressService', () => {
let service: AddressService;
let injector: TestBed;
let httpTestingController: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [AddressService]
});
injector = getTestBed();
service = injector.inject(AddressService);
httpTestingController = injector.inject(HttpTestingController);
// service = TestBed.inject(AddressService);
});
afterEach(() => {
httpTestingController.verify();
})
httpTestingController = TestBed.inject(HttpTestingController);
it('should be created', () => {
expect(service).toBeTruthy();
});
const dummyAddressListResponse = {
data: [
{direccion: 'address1'}, {Colas: 'queue1'},
{direccion: 'address2'}, {Colas: 'queue2'}
],
};
it('getAddress() should return data', () => {
service.getAddress().subscribe((res) => {
expect(res).toEqual(dummyAddressListResponse);
});
const req = httpTestingController.expectOne(`${environment.URI}/mock-address`);
expect(req.request.method).toBe('GET');
req.flush(dummyAddressListResponse);
})
});
在运行测试ng test --main src/app/services/address/address.service.spec.ts
我看到这个错误Error: Need to call TestBed.initTestEnvironment() first
我已经搜索并没有看到任何解决方案,有人发生过这种情况吗?
解决方案
第一件事:--main
不应该使用,它指向一个入口点,而不是一个期望的测试,并且应该是src/test.ts
.
要运行单个测试,请使用下一个命令:
ng 测试 --include "app/services/address/address.service.spec.ts"
测试应该有点不同:
describe('AddressService', () => {
let service: AddressService;
let injector: TestBed;
let httpTestingController: HttpTestingController;
beforeEach(async () => {
// let's compile TestBed first.
await TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [AddressService],
}).compileComponents();
// let's use TestBed.injector.
service = TestBed.inject(AddressService);
httpTestingController = TestBed.inject(HttpTestingController);
});
afterEach(() => {
httpTestingController.verify();
})
it('should be created', () => {
expect(service).toBeTruthy();
});
it('getAddress() should return data', () => {
const dummyAddressListResponse = {
data: [
{direccion: 'address1'}, {Colas: 'queue1'},
{direccion: 'address2'}, {Colas: 'queue2'}
],
};
let actual: any;
service.getAddress().subscribe((res) => actual = res);
const req = httpTestingController.expectOne(`${environment.URI}/mock-address`);
expect(req.request.method).toBe('GET');
req.flush(dummyAddressListResponse);
expect(actual).toEqual(dummyAddressListResponse);
});
});
推荐阅读
- scala - 根据多列更新一列
- sql-server - 参数为NULL时执行存储过程
- c# - 如何使用 LINQ 在 Select 中设置参数的值?
- mongodb - 在有许多查询字符串的mongo db中查找重复/新的有效方法
- python - 无法上传 15 个场景数据集(0.7 到 0.3)
- sql - Hive将max + 1插入同一张表不起作用
- python-3.x - Pywinauto - 运行相同命令时控制标识符消失
- jestjs - 开玩笑 mockResolvedValueOnce/mockReturnValueOnce 访问函数参数
- javascript - 每分钟调用多个 api 后,API 获取显示“网络请求失败”
- python - 在循环中以不同的名称保存数组