首页 > 解决方案 > 在 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();
        }
    );
});

标签: javascriptangularjasmine

解决方案


推荐阅读