Reactjs 如何使用Jest测试具有嵌套函数的Redux操作的高阶函数
我正在使用Jest测试Redux操作函数fn1。fn1是封装fn2的高阶函数。我的测试只是确保在执行fn1时调用fn2。似乎不起作用。我正在考虑使用jest.spyOn,但似乎没有什么意义 myActions.js: myAction.test.js:Reactjs 如何使用Jest测试具有嵌套函数的Redux操作的高阶函数,reactjs,testing,redux,jestjs,higher-order-functions,Reactjs,Testing,Redux,Jestjs,Higher Order Functions,我正在使用Jest测试Redux操作函数fn1。fn1是封装fn2的高阶函数。我的测试只是确保在执行fn1时调用fn2。似乎不起作用。我正在考虑使用jest.spyOn,但似乎没有什么意义 myActions.js: myAction.test.js: import {fn1, fn2} from myAction.test.js it("should call fn2", () => { fn1({test:"test"})("David") expect(fn2).t
import {fn1, fn2} from myAction.test.js
it("should call fn2", () => {
fn1({test:"test"})("David")
expect(fn2).toHaveBeenCalled();
});
在某种程度上,我觉得您试图做的是测试实现细节,而不是函数的API,但在单元测试中,您确实希望测试或断言基于指定输入的正确输出,即
f(x)=y
,测试输入x
产生输出y
大概您的fn2
将有自己的单元测试,因此您可以假设它在其他函数中使用时经过测试并正确无误,例如fn1
下面是我将如何测试fn1
:
it("should compute composed value", () => {
expect(fn1({ test: "test" })("David")).toEqual({
name: "David",
obj: { test: "test" }
});
});
我认为监视或断言函数调用的典型用例是回调。回调不是函数实现的一部分,但通常是外部副作用
const fn3 = (value, callback) => {
// bunch of code logic
callback(value);
// more code logic
return true;
};
it("should callback function", () => {
const cb = jest.fn();
fn3(3, cb);
expect(cb).toHaveBeenCalledWith(3);
});
不是答案的一部分,但信息丰富
在这一点上,我想指出术语中的一个错误:高阶函数与Currying
是一种将函数作为输入并返回新函数的函数。示例包括.map
,.filter
,功能组合
const plus3=x=>x+3;//一阶函数
常数双=(fn,v)=>fn(v)*2;//高阶函数
常量plus3AndDouble=x=>double(plus3,x);//(修饰的)一阶函数
console.log(plus3AndDouble(0));//(0 + 3) * 2 = 6
console.log(plus3AndDouble(1));//(1+3)*2=8
const fn3 = (value, callback) => {
// bunch of code logic
callback(value);
// more code logic
return true;
};
it("should callback function", () => {
const cb = jest.fn();
fn3(3, cb);
expect(cb).toHaveBeenCalledWith(3);
});