Javascript 测试具有内部函数的函数
我有一个函数,它根据在内部函数中传递的值返回布尔值。主父函数接受值,然后将这些值与内部函数中传递的值进行比较Javascript 测试具有内部函数的函数,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我有一个函数,它根据在内部函数中传递的值返回布尔值。主父函数接受值,然后将这些值与内部函数中传递的值进行比较 function withinMiles(miles, max) { return (customer) => calculateMiles( customer.distance, miles.distance, ) <= max; } 但是,我得到了以下错误 expect(received).toBe(expected) //
function withinMiles(miles, max) {
return (customer) =>
calculateMiles(
customer.distance,
miles.distance,
) <= max;
}
但是,我得到了以下错误
expect(received).toBe(expected) // Object.is equality
Expected: true
Received: [Function anonymous]
8 |
9 | test("Users are within 500Miles", () => {
> 10 | expect(withinMiles(250, 500)).toBe(true);
| ^
11 | });
12 |
at Object.<anonymous> (app.test.js:10:31)
expect(received).toBe(expected)//Object.is相等
预期:正确
已收到:[匿名函数]
8 |
9 |测试(“用户在500英里以内”,()=>{
>10 |期望(不超过250,500英里)为(真);
| ^
11 | });
12 |
反对。(app.test.js:10:31)
withinMiles
返回一个函数,一个函数显然不等于布尔值true
没有直接比较函数的好方法,因此需要使用客户调用该函数才能通过测试:
expect(withinMiles(250, 500)(someCustomer)).toBe(true);
withinMiles
返回一个函数,而函数显然不等于布尔值true
没有直接比较函数的好方法,因此需要使用客户调用该函数才能通过测试:
expect(withinMiles(250, 500)(someCustomer)).toBe(true);
... 您(有点)回答了自己的问题--withinMiles
的返回值是一个函数。您必须使用customer
y对象调用该函数。它是返回布尔值的内部函数,而不是withinMiles
。被误导性地命名为的Within Miles
是一个函数生成器。它不仅是一个具有内部函数的函数,而且是一个高阶函数。这意味着内部函数仍然可以测试,而如果不返回它就不会是真的。。。。您(有点)回答了自己的问题--withinMiles
的返回值是一个函数。您必须使用customer
y对象调用该函数。它是返回布尔值的内部函数,而不是withinMiles
。被误导性地命名为的Within Miles
是一个函数生成器。它不仅是一个具有内部函数的函数,而且是一个高阶函数。这意味着内部函数仍然可以被测试,而如果不返回它就不会是真的。