Проверьте Utf8Checker, это простой класс, который делает именно это в чистом управляемом коде. http://utf8checker.codeplex.com
Обратите внимание: как уже указывалось, определение кодировки имеет смысл только для потоков байтов. Если у вас есть строка, она уже закодирована от кого-то по пути, который уже знал или угадал кодировку, чтобы получить строку в первую очередь.
Это работает для меня. Например, используя chai для утверждений.
const chai = require('chai');
const expect = chai.expect;
describe('test', function () {
function generateException() {
throw new Error('test error');
}
it('should give an error', async ()=> {
try {
await generateException();
expect(true).to.be.false;
} catch(err) {
console.log(err.message);
expect(err.message).to.equal('test error');
}
})
})
Кажется, есть разница в способе использования Promise.reject()
против throw new Error()
. Когда функция generateException
выдает ошибку, ваши тесты работают. Однако, если это было Promise.reject()
, оно никогда не попадет в блок catch.
Если вы сделаете что-то вроде let result = await generateException();
, вы увидите, что это ошибка, которую вы ожидаете, если функция geenerateException
использует отклонение обещания.
Вы можете связать обещания с await, если захотите.
function generateException() {
return new Promise(reject => {
return reject(new Error('Promise Rejected');
})
it('should give an error', async ()=> {
await generateException().catch(error => {
expect(error.message).to.equal('Promise Rejected');
})
});
Чтение частей этой статьи об асинхронном коде может немного помочь.