Hier habe ich eine Funktion generateBlocks
, die in einem Array und eine Funktion onBlockClick
übernimmt. Sie gibt ein Array von Objekten zurück, wobei jedes Objekt zwei Eigenschaften hat: label
und onClick
.Wie testet man eine Funktion, die Funktionen zurückgibt?
function generateBlocks(blocks, onBlockClick){
return blocks.map(block => (
{
label: block.label,
onClick:()=>onBlockClick(block.name)
}
))
}
Ich kann nicht testen, es ist Rückgabewert. Hier ist der Testfall:
const blocks = [{label: "A", name: "a"}, {label: "B", name: "b"}];
const onBlockClick = someFunction(){};
expect(generateBlocks(blocks, onBlockClick)).to.deep.equal(expected)
ich nicht expected
als [[{label: "A", onClick:()=>onBlockClick("A")},...]
erstellen kann, weil Funktionsreferenz anders sein wird.
Also, wie Refactor generateBlocks Funktion, um es testbar zu machen?
Der erste Schritt, den Sie gemacht haben, ist zu fragen ** "Wie teste ich es?" **. Das nächste, was Sie sich fragen sollten, ist ** "Was will ich hier testen?" **. Es ist schwierig, vorhandenen Code umzuwandeln, um ihn testbar zu machen, wenn Sie nicht wirklich wissen, was Sie testen möchten. – byxor
Nun, verwenden Sie nicht 'deep.equal'? Stellen Sie einfach sicher, dass jedes Objekt ein '.label' hat und dass' .onclick() 'den Namen zurückgibt, wenn Sie die Identity-Funktion für' onBlockClick' übergeben. – Bergi
@Brandon Bitte sehen Sie sich den Testfall an, der ** deutlich erklärt ** was ich testen möchte, was ** der Rückgabewert ** ist. –