2016-07-06 8 views
0

私は以下の約束をしています。私は彼らが正しく動作していることを知っています.funcThreeのconsole.log出力は正しいデータを返します。テストを通じてこれをどのように証明できますか?チャイの約束の戻り値

基本的に、この約束をテストするにはどうすればよいですか?私は以下のテストを試みましたが、私がそこに置いたもの(expect(false)to.be.trueを含む)に関係なく、常にtrueを返します。私はそれが実際に期待通りの文に達しているとは思わない。あなたが実際にchai-as-promisedを使用するようにチャイを指示する必要があり

CODE

let number = 0; 
let count = 0; 

// Find Mongoose document 
function funcOne(query) { 
    return new Promise(function (resolve, reject) { 
    MongooseDocument.find(query) 
     .exec(function (err, results) { 
     if (err) { 
      reject(err); 
     } 
     resolve(results); 
     }); 
    }); 
} 

// Iterate over each document and adjust external value 
function funcTwo(documents) { 
    return new Promise(function (resolve, reject) { 
    _.each(documents, function (document) { 
     count += 1; 
     number += document.otherNumber; 
    }); 
    if (count >= documents.length) { 
     resolve({ 
     count, 
     number, 
     }); 
    } 
    }); 
} 

// Chain promises and return result 
function funcThree(query) { 
    return funcOne(query).then(funcTwo).then(function (result) { 
    console.log("=================="); 
    console.log(result); 
    return result; 
    }); 
} 

試験例

// The expect test below never runs! How do I test this promise? Or 
// better yet, how do I get the value returned as a result from the 
// promise to test that? 
it('should return an object', function() { 
    funcThree(query).then(function(result) { 
    return expect(result).to.be.an('object'); 
    }); 
}); 

答えて

0

chaiを使用してchai-as-promised。また、あなたがキーワードeventuallyを使用する必要があるとあなたが戻っit()に約束を返す必要が約束を返すために、アサーションを変換する

var chai = require('chai'); 
chai.use(require('chai-as-promised'); 

chai-as-promisedを使用する場合、実際の約束返す関数(この場合はfuncThree(query))に対してアサーションを実行する必要があります。これは、常にあなたのテスト関数がtrueを返すようにしているからです。実際にPromiseが解決するのを待っているのではなく、エラーが返されていないので、成功したとみなされます。あなたはまた、次の構文

it('should return an object', function() { 
    var funcThreePromise = funcThree(query); 

    // Promise below is whatever A+ Promise library you're using (i.e. bluebird) 
    return Promise.all([ 
    expect(funcThreePromise).to.eventually.be.fulfilled, 
    expect(funcThreePromise).to.eventually.be.a('object') 
    ]); 
}); 
を使用して、同じ約束に対する複数のアサーションを行うことができます

it('should return an object', function() { 
    return expect(funcThree(query)).to.eventually.be.a('object'); 
}); 

次のようにだからあなたのテストの例は、上記でなければなりません

関連する問題