【发布时间】:2021-03-11 23:02:42
【问题描述】:
使用 Angular 8、@angular-builders/jest 8.0.2、jest 24.8,并给出以下测试通过
import { tick, fakeAsync } from '@angular/core/testing';
it('test 1000 milliseconds', fakeAsync(() => {
const fn = jest.fn();
setTimeout(() => {
fn();
}, 1000);
tick(999);
expect(fn).not.toHaveBeenCalled();
tick(1);
expect(fn).toHaveBeenCalled();
}));
我想用it.each写几个类似的测试
it.each([[1000], [2000], [3000]])(
'test %d milliseconds',
fakeAsync(milliseconds => {
const fn = jest.fn();
setTimeout(() => {
fn();
}, milliseconds);
tick(milliseconds - 1);
expect(fn).not.toHaveBeenCalled();
tick(1);
expect(fn).toHaveBeenCalled();
}),
);
但我在每次测试时都收到此错误:
Expected to be running in 'ProxyZone', but it was not found.
at Function.Object.<anonymous>.ProxyZoneSpec.assertPresent (node_modules/zone.js/dist/proxy.js:42:19)
at node_modules/zone.js/dist/fake-async-test.js:588:47
我错过了什么?
【问题讨论】:
-
您找到解决方法了吗?
-
@distante:没有我想要的那么整洁,但作为一种解决方法,我用
describe.each包裹了一个标准的it,这样我就可以毫无问题地使用fakeAsync。这可以完成工作,但会在规范文件和控制台输出中增加一些噪音 -
谢谢。你应该考虑写一个你的问题的答案。也许它不像你说的那样漂亮,但它可以帮助其他人找到更好的方法。
标签: angular jestjs angular-test ts-jest