Jes*_*rez 11 javascript frontend mocking angular
我正在尝试对服务的角度进行测试。
这是我的代码的一部分
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);
})
});
Run Code Online (Sandbox Code Playgroud)
运行测试时ng test --main src/app/services/address/address.service.spec.ts
我看到此错误错误:需要首先调用 TestBed.initTestEnvironment()
我已经搜索过,但没有看到任何解决方案,有人遇到过这种情况吗?
Dei*_*ian 17
对于jest用户 - 只需在setup-jest.js中添加以下代码。因为jest需要初始化。
import { TestBed } from "@angular/core/testing";
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from "@angular/platform-browser-dynamic/testing";
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
Run Code Online (Sandbox Code Playgroud)
这是使用 ng-packagr (即角度库)吗?如果是这样,您可能需要检查 ./project/ 文件夹下是否没有 node_modules。
这给我带来了完全相同的错误。当我删除项目文件夹下的node_modules时,一切又开始工作了。
来源: https: //github.com/ngneat/spectator/issues/546
第一件事:--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);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13326 次 |
| 最近记录: |