JavaScript测试承诺

时间:2018-02-07 19:58:30

标签: javascript node.js unit-testing

我正在尝试测试一个能够实现这样的承诺的函数

{
state: 'fulfilled'
value:[Array]
}

function register (foo) {
    return new Promise((resolve,reject)=>{
        query = "INSERT IGNORE INTO....";
        connection.query(query, [foo.value.from, foo.value.id], (err, res, fields) => {
        if(err){
            return undefined //this will change
        }
        return foo
        })
    })
}

事情是我回来了,不拒绝也没有解决。所以当我测试..

    it('insertion error', function () {
        var res = 'error'
        connection = {
            query: (query, input, cb) =>{
                return cb(res, null, null)
            }
        }
        let database = proxyquire('path/to',{
            './connection': connection
        })

        var input = 
        {
            value: {

        id: 'bar',
        data: [],
        from: 'foo'
        }}  


        return database.register(input)
        .then( (result) => {
            expect(result).to.be.undefined
        })
        .catch( (err) => {
            console.log(err)
            err = new Error (`Test fail: ${err}`)
            throw err;
        })
    })

该功能运作良好,我很确定。 我确定的另一件事是THEN / CATCH条件永远不会出现。我知道如果我替换它将显示的返回,但我需要返回。

我应该修改什么,或者我应该如何测试它。

1 个答案:

答案 0 :(得分:1)

这是一个基本的例子,你如何制作一个promisse,在这个例子中你可以在register()函数中发送true或false。

function register ( foo ) {
   return new Promise( (resolve, reject) =>{
         if(foo){
            resolve('Done');
         }else{
            reject('Error')
         } 
   } )
}


register(false).then( result=>{
   document.write('promisse success... ', result);
} ).catch( error => {
   document.write('promisse error... ', error);
} )