javascript - 在 Angular 7、Jasmine、Karma、Chrome 中测试 HTMLMediaElement.play()
问题描述
我正在尝试使用 Jasmine 在 Angular 中创建一个测试,当HTMLMediaElement.play()
承诺被解决和拒绝时,它应该符合这两个条件。试图通过以下方式弄清楚:
it('should start playing audio file', async(() => {
new Audio('path/to/my.mp3').play().then(
() => {
console.log('SUCCESS');
expect(true).toBeFalsy('FROM RESOLVE');
},
() => {
console.log('ERROR');
expect(true).toBeFalsy('FROM REJECT');
}
);
}));
我不明白为什么,当 promise 被拒绝时,一切正常:
错误(在控制台中)
预期为假 'FROM REJECT'(来自 Jasmine)
但是当 promise 得到解决时,我的测试也应该失败,但它通过了(Jasmine 没有错误),我在控制台中得到以下信息:
SUCCESS
Unhandled Promise 拒绝:当没有当前规范时使用“expect”,这可能是因为异步测试超时;区域:代理区域;任务:Promise.then;值:错误:没有当前规范时使用了“期望”,这可能是因为异步测试超时
expect
当这个承诺解决时,为什么不工作?
更新
以下两个示例起到了作用(感谢@quirimmo):
it('should start playing audio file', async () => {
await new Audio('path/to/my.mp3').play().then(
() => {
console.log('SUCCESS');
expect(true).toBeFalsy('FROM RESOLVE');
},
() => {
console.log('ERROR');
expect(true).toBeFalsy('FROM REJECT');
}
);
});
it('should start playing audio file', (done) => {
new Audio('path/to/my.mp3').play().then(
() => {
console.log('SUCCESS');
expect(true).toBeFalsy('FROM RESOLVE');
done();
},
() => {
console.log('ERROR');
expect(true).toBeFalsy('FROM REJECT');
done();
}
);
});
解决方案
推荐阅读
- vue.js - Vue.js 绑定列表中每个项目的样式(类)与 v-for 依赖于项目数据
- java - 打印源文件的当前内容(在 Android 上使用 Java 或 Kotlin)
- android - 上传/下载特定文件到/从网络服务器到手机android工作室
- c# - 从 C# 中的列表更新对象
- javascript - 在 JS 中为 insertAdjacentHTML 设置动画
- django - django 过滤器视图中 IntegerRangeField 的 Meta.filter_overrides
- spring-boot - 当响应标头内容类型设置为 json 时,Spring Boot 控制器返回 xml
- php - Laravel - NoSQL 无限字段更新
- c# - 需要第三方实现的C#接口
- python - OpenCV参数表中的“[”是什么意思