2017-01-29 3 views
1

У меня есть небольшой тест (Mocha/Chai), который проверяет, что функция encryptPass возвращает правильный хэш:Использование Promise.all с утверждением

const assert = require('chai').assert; 
const bcrypt = require('bcrypt'); 
var encryptPass = require('../../shared/helpers/encryptPass.js'); 
var createUUID = require('../../shared/helpers/createUUID.js'); 

describe('encryptPass', function() { 
    it('returns correct password hash',() => { 
     var pass = createUUID(); 
     var encryptedPass = encryptPass(pass); 
     Promise.all([pass, encryptedPass]).then(values => { 
      let [pass, encryptedPass] = values; 
      var compareResult = bcrypt.compareSync(pass, encryptedPass); 
      assert.equal(compareResult, true); 
     }); 
    }); 
}); 

Меня беспокоит то, что есть, что утверждение предполагает, что функция Promise.all будет работать без ошибки. Как лучше справиться с этим?

ответ

2

Просто вернуть обещание, которая является результатом теста:

it('returns correct password hash',() => { 
    var pass = createUUID(); 
    var encryptedPass = encryptPass(pass); 
    // Just return... 
    return Promise.all([pass, encryptedPass]).then(values => { 
     let [pass, encryptedPass] = values; 
     var compareResult = bcrypt.compareSync(pass, encryptedPass); 
     assert.equal(compareResult, true); 
    }); 
}); 

Это будет заботиться о говорить мокко, что ваш тест является асинхронным. В исходном коде Mocha не будет ждать завершения теста. Возвращение обещания заставляет его ждать. Во-вторых, возвращая обещание, вы также контролируете, будет ли тест успешным или нет. Если какое-либо из обещаний, переданных в Promise.all, отклонено, это является провалом теста. Если код в обработчике .then терпит неудачу, это также является провалом теста. Например, если assert.equal не работает, возникает AssertionError, что приводит к отказу от обещания, которое Mocha рассматривает как отказ.