4

这里我有一个函数generateBlocks,它需要一个数组blocks和函数onBlockClick。它返回一个对象数组,其中每个对象都有两个属性labelonClick如何测试返回函数的函数?

function generateBlocks(blocks, onBlockClick){ 
    return blocks.map(block => (
    { 
     label: block.label, 
     onClick:()=>onBlockClick(block.name) 
    } 
)) 
} 

我无法测试它的返回值。 这里的测试用例:

const blocks = [{label: "A", name: "a"}, {label: "B", name: "b"}]; 
const onBlockClick = someFunction(){}; 

expect(generateBlocks(blocks, onBlockClick)).to.deep.equal(expected) 

我无法创建expected[[{label: "A", onClick:()=>onBlockClick("A")},...],因为函数的引用也会有所不同。

那么我该如何重构generateBlocks函数才能使其可测试?

+0

您采取的第一步是询问**“我如何测试它?”**。接下来你应该问自己的问题是**“我想在这里测试什么?”**。如果你实际上不知道你想测试什么,那么很难重构现有代码来使其可测试。 – byxor

+4

那么,不要使用'deep.equal'?只要声明每个对象都有一个'.label',并且在传入'onBlockClick'的标识函数时,它的'.onclick()'返回名称。 – Bergi

+0

@Brandon请参阅**清楚说明的测试用例**我想要测试的是**返回值**。 –

回答

0

您可以在函数ref上使用.toString()方法,并与预期的字符串结果进行比较。