Jasmine toHaveBeenCalledWith不能与es6中的fetch API和URLSearchParams一起使用

时间:2017-04-24 21:01:56

标签: http jasmine tdd fetch-api

我用Fetch API编写了一个POST调用测试。为了检查我是否发送了好的参数,我使用了jasmine toHaveBeenCalledWith,并且可以正常使用字符串体。

当我从es6而不是Angular将此字符串更改为URLSearchParams对象时。测试变为红色,但预期的呼叫和呼叫完全相同。

你有个主意吗?

测试:

...
mockHttp = {post: null} as Http;
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');

let searchParams = new URLSearchParams();
searchParams.set("refresh_token", token.refreshToken);
searchParams.set("grant_type", "refresh_token");
searchParams.set("client_id", "DriverApp");

expect(mockHttp.post).toHaveBeenCalledWith("ENDPOINT_API_URL_REFRESH_TOKEN", searchParams, {headers: headers})
...

1 个答案:

答案 0 :(得分:0)

使用jasmine的自定义相等测试器:

在测试文件中添加此功能:

function customEquality(expected: any, value: any): boolean {
    return JSON.stringify(expected).trim() === JSON.stringify(value).trim();
}

在beforeEach中添加以下行:jasmine.addCustomEqualityTester(customEquality);

并正常使用toHaveBeenCalledWith