Я изучаю node.js и как тестировать функции. У меня проблема при использовании mocha: когда функции проходят тестирование, все в порядке, я получаю приятное сообщение.
Но если какая-либо функция, которая не проходит тест - например, результат в тесте - 0, но намеренно я написала предположение, чтобы ожидать 1 - это дает мне массаж ошибок длиной в милю в консоли bash-cli-console:
Async functions
(node:6001) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: 0 == 1
at utils.requestWikiPage.then.resBody (/home/sandor/Documents/learning-curve-master/node-dev-course/testing-tut/utils/utils.test.js:10:20)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:6001) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:6001) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
1) it should return a html page
0 passing (2s)
1 failing
1) Async functions
it should return a html page:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/sandor/Documents/learning-curve-master/node-dev-course/testing-tut/utils/utils.test.js)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! dev-course@1.0.0 test: `mocha ./testing-tut/**/*.test.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the dev-course@1.0.0 test script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/sandor/.npm/_logs/2018-07-04T11_31_53_292Z-debug.log
[nodemon] app crashed - waiting for file changes before starting...
Я не знаю, почему я получаю эту часть: UnhandledPromiseRejectionWarning ...
и почему я получаю эту часть: npm ERR! код ELIFECYCLE
функция, которую я тестирую: (она отправляет запрос в википедию на вики-страницу Джорджа Вашингтона и собирает html-страницу из ответа. На «конце» readstream она разрешает html-страницу. Функция работает просто штраф)
// utils.js
function requestWikiPage() {
const reqOpts = {
hostname : 'en.wikipedia.org',
port : 443,
path : '/wiki/George_Washington',
method : "GET"
}
return new Promise(resolve => {
let req = https.request(reqOpts, (res) => {
let resBody = "";
res.setEncoding('utf-8');
res.on('data', (chunk) => {
resBody += chunk;
});
res.on('end', () => {
resolve(resBody);
});
});
req.on('err', (err) => {
console.log(err);
});
req.end();
});
}
module.exports.requestWikiPage = requestWikiPage;
Код Мокко: (Переменная 'resBody' - это строка, содержащая html-страницу, где '' находится с индексом 0. В утверждении я проверяю его на 1, чтобы создать сообщение об ошибке)
const utils = require('./utils');
var assert = require('assert');
describe('Async functions', function() {
it('it should return a html page', (done) => {
utils.requestWikiPage().then(resBody => {
assert.equal(resBody.indexOf('<!DOCTYPE html>'), 1);
done();
});
});
});
Так что я не понимаю, почему я получаю это длинное сообщение об ошибке только потому, что я ожидаю, что не в индексе 0, а в первом? (На самом деле я получаю это сообщение об ошибке с каждой функцией не только с этим)
Как мне настроить мокко, чтобы оно давало мне более минимальное и интуитивно понятное сообщение об ошибке.
Большое спасибо за ваши ответы