Angular 测试抛出错误
Angular test throwError
我在 angular 中进行测试时遇到了一些困难。
我在服务中有一个功能是这样的:
public getConfigFromData(conf: string, data: any): Observable<any> {
if (!conf) {
return throwError(`Error`);
} else if (data) {
return this.getConfig(conf, data);
} else {
return throwError('Other error');
}
}
我在测试抛出的错误时遇到了一些问题。
这是以下测试:
it('...', () => {
expect(() => {
service.getConfigFromData(null, '');
}).toThrowError('Error');
});
我从 jasmine 得到的错误是
Error: Expected function to throw an Error.
我一直在其他答案中寻找,但没有得出任何结论。
谁能猜出我错过了什么或做错了什么?
非常感谢您。
我认为 throwError
returns 一个 observable 并且你需要 subscribe
到 observable 起飞的方法。
试试这个:
it('...', (done: DoneFn) => {
service.getConfigFromContext(null, '').pipe(take(1)).subscribe({
next: () => {},
// subscribe, make assertion in the error block and call done to
// let jasmine know you're done with the unit test
error: (error) => { expect(error).toBeTruthy(); done(); }
});
});
我认为 .toThrowError
适用于 throw new Error('error');
的常规 JavaScript。
返回的 throwError
是 Observable<never>
类型的 Observable
,订阅后会立即出现指定的错误。因此,为了使您的测试工作,您必须订阅 Observable
或者可以简单地将其转换为 Promise
以查看抛出的错误。这可以使用 async
/await
来完成,如下所示:
it('#getConfigFromData should throw Error', async () => {
try {
await getConfigFromData(null, '').toPromise().then(() => null);
fail('should have thrown Error')
} catch (error) {
expect(error).toBe('Error')
}
});
我在 angular 中进行测试时遇到了一些困难。
我在服务中有一个功能是这样的:
public getConfigFromData(conf: string, data: any): Observable<any> {
if (!conf) {
return throwError(`Error`);
} else if (data) {
return this.getConfig(conf, data);
} else {
return throwError('Other error');
}
}
我在测试抛出的错误时遇到了一些问题。 这是以下测试:
it('...', () => {
expect(() => {
service.getConfigFromData(null, '');
}).toThrowError('Error');
});
我从 jasmine 得到的错误是
Error: Expected function to throw an Error.
我一直在其他答案中寻找,但没有得出任何结论。 谁能猜出我错过了什么或做错了什么? 非常感谢您。
我认为 throwError
returns 一个 observable 并且你需要 subscribe
到 observable 起飞的方法。
试试这个:
it('...', (done: DoneFn) => {
service.getConfigFromContext(null, '').pipe(take(1)).subscribe({
next: () => {},
// subscribe, make assertion in the error block and call done to
// let jasmine know you're done with the unit test
error: (error) => { expect(error).toBeTruthy(); done(); }
});
});
我认为 .toThrowError
适用于 throw new Error('error');
的常规 JavaScript。
返回的 throwError
是 Observable<never>
类型的 Observable
,订阅后会立即出现指定的错误。因此,为了使您的测试工作,您必须订阅 Observable
或者可以简单地将其转换为 Promise
以查看抛出的错误。这可以使用 async
/await
来完成,如下所示:
it('#getConfigFromData should throw Error', async () => {
try {
await getConfigFromData(null, '').toPromise().then(() => null);
fail('should have thrown Error')
} catch (error) {
expect(error).toBe('Error')
}
});