javascript - es6使用mocha测试的问题

查看:126
本文介绍了javascript - es6使用mocha测试的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.最近开始学习es6,但是做promise单元测试的时候出现了问题
2.问题如下:

      进行promise.all测试的时候出现了错误
      **debug.html:38 Error: timeout of 6000ms exceeded. Ensure the done() callback is being called in this test.**
      普通promise使用不会出现这个错误.

3.网上找了一些,并没有想要的答案,不知道在这里能否找到答案

代码如下
1:) PromiseObject.js 中的某一段

  //测试所有的promise
    testPromiseAll(){
        //Promise.all([...]) 其中的为promise对象 当所有的都resolved 才会变成 resolved  如果一个为 injected 则会变成 injected

        let promise1 = new Promise((reolve,inject)=>{
                setTimeout(()=>{
                    reolve(1)
                },1000);
        });
        let promise2 = new Promise((reolve,inject)=>{
            setTimeout(()=>{
                reolve(2)
            },2000);

        });
        let promise3 = new Promise((reolve,inject)=>{

            setTimeout(()=>{
                reolve(3)
            },1500);
        });
        let promiseAll = Promise.all([promise1,promise2,promise3]);
        //data 为[1,3,2]? 还是[1,2,3]
        //结果为[1,2,3]
        return promiseAll;
    }
    

2): BaseSyntax.spec.js 测试代码中的某一段

//测试promise对象
describe('ES6 PromiseObject Test', function () {
    let promiseObject = new PromiseObject(),
        utils = new Utils();
    this.timeout(6000);
       it('测试Promise.all', function (done) {
        let promiseAll =  promiseObject.testPromiseAll();
        this.timeout(6000); //根据谷个搜索出来的解决方案 并不奏效
        return promiseAll.then(data=>{
            expect(data).to.deep.equal([1,2,3]);
            setTimeout(done, 100);
        }, error=>{
        }).catch(e=>{
        });
    });
})

目前状况就是这样,如果在 expect(data).to.deep.equal([1,2,3]); 这一地改为 [1,3,2]的时候 也就是说结果出错 ,则会提示timeout ,结果正常的话,则提示测试成功。

补充:经过刚才的调试与猜想在@leftstick说的方式中 加入了 catch(error=>{done(error)}) 这个时候报错,上一级捕获这个异常提示测试失败。
猜测except中的异常被catch捕获,然后没有对异常做相应的处理,并且没有冒泡到上一级,导致测试通过。

解决方案

看错误就是因为你没有调用done方法,导致超时了。

上代码吧,不然不好说,你这么问有些笼统了

补充 + 修正:

明白了,你的意思是,expect(data).to.deep.equal([1,2,3]);的时候一切正常,但expect(data).to.deep.equal([1,3,2]);时,本来应该报结果错误,但却超时了,对吧?

应该这么写:

describe('ES6 PromiseObject Test', function() {
    let promiseObject = new PromiseObject(),
        utils = new Utils();
    this.timeout(6000);
    it('测试Promise.all', function(done) {
        let promiseAll = promiseObject.testPromiseAll();
        this.timeout(6000); //根据谷个搜索出来的解决方案 并不奏效
        return promiseAll.then(data => {
                expect(data).to.deep.equal([1, 3, 2]);
                done();//这里和setTimeout没有半毛钱关系,刚才忘了删掉了
             })
             .catch(done);
    });
})

这篇关于javascript - es6使用mocha测试的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆