单位测试角异步有望
我有一些艰难的时期试图解决一些单元测试。如果params.calltype ==='inbound',我成功地测试了该函数,但不知道如何测试params.calltype ===“其他东西”。这是我必须测试的代码:
searchObject(params: ISearchObjectParams): Promise<IScreenPopSearchObjectResult> {
return new Promise((resolve, reject) => {
let searchParams;
if (params.searchValuesString) {
searchParams = params.searchValuesString;
} else {
const quotedSearchValues = params && params.searchValues && params.searchValues.map(x => '"' + x + '"');
searchParams = quotedSearchValues && quotedSearchValues.join(' OR ');
}
if (params.callType === 'inbound') {
sforce.opencti.searchAndScreenPop({
searchParams: searchParams,
queryParams: params.queryParams,
callType: params.callType,
deferred: true,
callback: response => {
if (response.success) {
resolve(this.createSearchObjectResult(response));
} else {
reject(this.parseLightningError(response, LocaleKeys.searchObject));
}
}
});
}
});
这是我进行的单位测试, if(params.calltype ==='inbound')。
it('should resolve with parsed search result', async () => {
service.createSearchObjectResult = jasmine.createSpy().and.returnValue({});
sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
}) => {
params.callback({ success: true } as any);
});
await expectAsync(service.searchObject({ searchValues: ['value1', 'value2'], callType: 'inbound' } as any)).toBeResolvedTo({} as any);
testUtils.expectSingleCall(service.createSearchObjectResult, { success: true });
});
i '试图使其成为 ,但我无法成功。 :
it('should not resolve if is not inbound', async () => {
sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
}) => {
params.callback({ success: false } as any);
});
await expectAsync(service.searchObject({ searchValuesString: 'value1&&value2', callType: 'inbound' } as any)).toBeRejected({} as any);
testUtils.expectNotCalled(sforce.opencti.searchAndScreenPop);
expect(sforce.opencti.searchAndScreenPop).not.toHaveBeenCalled();
});
请提出建议?
I have some hard times trying to resolve some unit testing. I succeed in testing the function if params.callType === 'inbound' but don't know how to test if params.calltype === "something else". Here is the code I have to test:
searchObject(params: ISearchObjectParams): Promise<IScreenPopSearchObjectResult> {
return new Promise((resolve, reject) => {
let searchParams;
if (params.searchValuesString) {
searchParams = params.searchValuesString;
} else {
const quotedSearchValues = params && params.searchValues && params.searchValues.map(x => '"' + x + '"');
searchParams = quotedSearchValues && quotedSearchValues.join(' OR ');
}
if (params.callType === 'inbound') {
sforce.opencti.searchAndScreenPop({
searchParams: searchParams,
queryParams: params.queryParams,
callType: params.callType,
deferred: true,
callback: response => {
if (response.success) {
resolve(this.createSearchObjectResult(response));
} else {
reject(this.parseLightningError(response, LocaleKeys.searchObject));
}
}
});
}
});
Here is the unit test I made that is working for the "if (params.callType === 'inbound').
it('should resolve with parsed search result', async () => {
service.createSearchObjectResult = jasmine.createSpy().and.returnValue({});
sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
}) => {
params.callback({ success: true } as any);
});
await expectAsync(service.searchObject({ searchValues: ['value1', 'value2'], callType: 'inbound' } as any)).toBeResolvedTo({} as any);
testUtils.expectSingleCall(service.createSearchObjectResult, { success: true });
});
I'm trying to make it for the else, but I can't succeed. This is what I tried for params.callType === "outbound"(that should be the else condition):
it('should not resolve if is not inbound', async () => {
sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
}) => {
params.callback({ success: false } as any);
});
await expectAsync(service.searchObject({ searchValuesString: 'value1&&value2', callType: 'inbound' } as any)).toBeRejected({} as any);
testUtils.expectNotCalled(sforce.opencti.searchAndScreenPop);
expect(sforce.opencti.searchAndScreenPop).not.toHaveBeenCalled();
});
Suggestions please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果
Promise-doctions
未缓存,它将起泡并丢弃错误。因此,也许您应该增加对错误的期望If the
Promise-Rejection
isn't cached, it will bubble up and throw the error. So maybe you should add an expectation for the error like