如何在异步笑话 test.each 案例中传入 done() 参数
Posted
技术标签:
【中文标题】如何在异步笑话 test.each 案例中传入 done() 参数【英文标题】:How to pass in the done() parameter on an async jest test.each case 【发布时间】:2020-05-13 09:04:12 【问题描述】:我正在尝试编写一个测试异步方法的 jest 测试用例,我想传入 done()
参数,所以 jest 在结束测试之前等待它被触发,但是,我不确定在哪里把它说出来。
有什么想法吗?
const testcases = [
[
'Crew',
[1,2,3],
Enum.Level1
],
[
'Staff',
[4,5,6],
Enum.Level2
]
];
test.each(testcases )(
'Should be able to load differing cases %p',
(
typeName: string,
initalVals: string[],
type: LevelType
) =>
// some call that updates mobx store state
when(
() => mobxstoreProperty.length == initalVals.length,
() =>
// my assertions
done();
);
);
对于一个单一的笑话测试,我可以这样做:
test('my single test', done =>
// some call that updates mobx store state
when(
() => mobxstoreProperty.length == initalVals.length,
() =>
// my assertions
done();
);
);
只是不确定当我使用test.each
方法时该怎么做。
【问题讨论】:
【参考方案1】:要传递和评估done
,done
回调应该是测试用例参数函数中的最后一个参数。
另外,当你在 typescript 中使用 test.each
方法时,这里是处理打字的方法:
// found at https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34617
it.each<number | jest.DoneCallback>([1, 2, 3])(
'dummy: %d',
(num: number, done: jest.DoneCallback) =>
done();
,
);
【讨论】:
【参考方案2】:我使用命名参数,我可以添加done()
方法作为最后一个函数参数。比如像这样:
const testcases:
typeName: string;
initalVals: string[],
type: LevelType
[] = [
typeName: 'Crew',
initalVals: [1,2,3],
type: Enum.Level1
,
typeName: 'Staff',
initalVals: [4,5,6],
type: Enum.Level2
,
];
test.each(testcases)(
'Should be able to load differing cases %p',
// Must use `any` for `done`, as TypeScript infers the wrong type:
(typeName, initalVals, type, done: any) =>
// some call that updates mobx store state
when(
() => mobxstoreProperty.length == initalVals.length,
() =>
// my assertions
done();
);
);
我还没有测试你是否可以将 done()
方法添加为带有数组参数的最后一个参数,但也许这也可以。
【讨论】:
@uneatenbreakfast 这能回答你的问题吗?如果是,请采纳答案。以上是关于如何在异步笑话 test.each 案例中传入 done() 参数的主要内容,如果未能解决你的问题,请参考以下文章