javascript - jasmine 似乎不支持模拟 setImmediate 的时钟
问题描述
这是我的测试:
对于setTimeout
,jasmine.clock()
并且jasmine.clock().tick(...)
工作正常。
index.ts
:
import * as mod from './mod';
export function main() {
setTimeout(() => {
mod.foo();
}, 10);
}
mod.ts
:
export function foo() {}
index.spec.ts
:
import { main } from './';
import * as mod from './mod';
fdescribe('setImmediate', () => {
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
it('should pass', () => {
const fooSpy: jasmine.Spy = spyOn(mod, 'foo').and.stub();
main();
jasmine.clock().tick(10);
expect(fooSpy).toHaveBeenCalledTimes(1);
});
});
单元测试结果:
HeadlessChrome 73.0.3683 (Mac OS X 10.13.6): Executed 1 of 4 (skipped 3) SUCCESS (0.029 secs / 0.004 secs)
TOTAL: 1 SUCCESS
TOTAL: 1 SUCCESS
TOTAL: 1 SUCCESS
如果替换setTimeout
为setImmediate
,则单元测试失败。
index.ts
:
import * as mod from './mod';
export function main() {
setImmediate(() => {
mod.foo();
});
}
单元测试结果:
HeadlessChrome 73.0.3683 (Mac OS X 10.13.6) setImmediate should pass FAILED
Error: Expected spy foo to have been called once. It was called 0 times.
at <Jasmine>
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/src/tests/setImmediate/index.spec.ts:16:20)
at ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone.js:391:1)
at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1)
HeadlessChrome 73.0.3683 (Mac OS X 10.13.6): Executed 1 of 4 (1 FAILED) (0 secs / 0.104 secs)
HeadlessChrome 73.0.3683 (Mac OS X 10.13.6) setImmediate should pass FAILED
Error: Expected spy foo to have been called once. It was called 0 times.
at <Jasmine>
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/src/tests/setImmediate/index.spec.ts:16:20)
at ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone.js:391:1)
HeadlessChrome 73.0.3683 (Mac OS X 10.13.6): Executed 1 of 4 (1 FAILED) (skipped 3) (0.136 secs / 0.104 secs)
TOTAL: 1 FAILED, 0 SUCCESS
TOTAL: 1 FAILED, 0 SUCCESS
TOTAL: 1 FAILED, 0 SUCCESS
我发现了一个相关的问题:https ://github.com/jasmine/jasmine/issues/866 ,但是这个问题有点过时了,没有答案。
我的测试环境是 angular 8.x 使用ng test
命令。我认为这个问题与测试环境无关。以及节点模块的版本:
"jasmine-core": "^3.5.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "^4.4.1",
"karma-chrome-launcher": "^3.1.0",
"karma-coverage-istanbul-reporter": "^2.1.1",
"karma-jasmine": "^3.1.0",
"karma-jasmine-html-reporter": "^1.5.1",
解决方案
推荐阅读
- tizen - Tizen 原生 UI 创建
- windows - 如何在 Windows 批处理上重写这个 bash 命令?
- api - 资源是rest api的强制性条件吗?
- html - BEM 是否有区分状态选择器和子类选择器的约定?
- reactjs - 通过 Axios & React 追加到数组
- python - 将稀疏 NumPy 矩阵加载到 R 中
- android - 安卓全球高分系统
- javascript - 如何在反应中添加内联样式?
- vue.js - 将 npm 包导入 Vue.js 单文件组件
- audio - 如何从 .mp3 文件中获取元数据并使用 FFmpeg 将其作为文本放入视频中?