将 Promise.all 与断言一起使用
Using Promise.all with assertion
我有一个小测试 (Mocha/Chai),它测试 encryptPass 函数 returns 正确的哈希值:
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 函数可以正常工作而不会抛出错误。如何最好地处理这个问题?
只是 return 测试结果的承诺:
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 您的测试是异步的。在您的原始代码中,Mocha 不会等待测试完成。返回承诺会迫使它等待。其次,通过 return 承诺,您还可以控制测试是否成功。如果传递给 Promise.all
的任何承诺被拒绝,那就是测试失败。如果 .then
处理程序中的代码失败,那也是测试失败。例如,如果 assert.equal
失败,则会引发 AssertionError
,这会导致拒绝承诺,Mocha 将其视为失败。
我有一个小测试 (Mocha/Chai),它测试 encryptPass 函数 returns 正确的哈希值:
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 函数可以正常工作而不会抛出错误。如何最好地处理这个问题?
只是 return 测试结果的承诺:
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 您的测试是异步的。在您的原始代码中,Mocha 不会等待测试完成。返回承诺会迫使它等待。其次,通过 return 承诺,您还可以控制测试是否成功。如果传递给 Promise.all
的任何承诺被拒绝,那就是测试失败。如果 .then
处理程序中的代码失败,那也是测试失败。例如,如果 assert.equal
失败,则会引发 AssertionError
,这会导致拒绝承诺,Mocha 将其视为失败。