ala*_*yor 8 javascript unit-testing reactjs jestjs
我有以下要测试的模块。
import * as apiUtils from './apiUtils';
export function awardPoints(pointsAwarding) {
return apiUtils.callApiService("POST", "points", pointsAwarding);
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试。
it("should call apiUtils with correct path", () => {
//given
jest.spyOn(apiUtils, 'callApiService');
//when
pointsAwardingApi.awardPoints();
//then
expect(apiUtils.callApiService).toBeCalledWith(expect.any(String), 'points', expect.any(Object));
});
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此测试时,出现以下错误。
Any<Object> as argument 3, but it was called with undefined.
我原以为这expect.any(Object)也会匹配,undefined但似乎并非如此。
我也试过,expect.anything()但我遇到了类似的错误。
我可以简单地指定undefined为第三个参数,但我的测试仅用于验证第二个参数。
有没有办法可以使用匹配任何对象的匹配器,包括undefined?
它看起来与expect.anything设计不匹配未设置的值。如果你需要一个“真正的”匹配器,这里有一个:
export const expectAnythingOrNothing = expect.toBeOneOf([expect.anything(), undefined, null]);
Run Code Online (Sandbox Code Playgroud)
你需要jest-extended的toBeOneOf匹配-但它是一个有用的包呢:)
Mic*_*ngo -3
expect.any(constructor) 匹配使用 . 创建的任何内容 constructor 。在你的例子中,它检查它是否是用Object构造函数创建的,而构造函数undefined没有创建。
expect.anything()匹配除null和之外的任何内容undefined,因为这两者在 JavaScript 中都被视为无效。expect.anything()是测试它既不是null也不是的快捷方式undefined。
你试图测试的不是任何东西,而是我不在乎它是什么或者它是否存在。这样的事情没有匹配器,也不应该有,因为如果你不关心它是什么,你就不会测试它。
我可以简单地将 undefined 指定为第三个参数,但我的测试只是为了验证第二个参数。
老实说,我认为测试函数调用的特定参数并不是一个好方法。为什么您必须只测试该函数的这个参数?一般来说,如果给出了所有参数,并且如果您有可选参数,您仍然需要专门测试它们是否丢失,则函数仅提供有意义的输出。
如果参数以某种复杂的方式计算,您应该测试计算,这可能需要您从当前函数中重构它。
| 归档时间: |
|
| 查看次数: |
6170 次 |
| 最近记录: |