Как решить проблему с Uncaught AssertionError: Unspecified AssertionError в Mocha?
По книге Веб-разработка с применением Node и Express в главе 5 "Обеспечение качества" не могу понять, почему в межстраничном тестировании выполняется только один тест, вместо двух.
Весь код брал с книги, не могу понять причину ошибки.
qa/tests-crosspage:
var Browser = require('zombie'),
assert = require('chai').assert;
var browser;
suite('Межстраничные тесты', function () {
setup(function () {
browser = new Browser();
});
test('запрос расценок для групп со страницы туров по реке Худ '
+ 'должен заполнять поле реферера', function (done) {
var referrer = 'http://localhost:3000/tours/hood-river';
browser.visit(referrer, function () {
browser.clickLink('.requestGroupRate', function (){
assert(browser.field('referrer').value
=== referrer);
done();
});
});
});
test('запрос расценок для групп со страницы туров '
+ 'пансионата "Орегон Коуст" должен '
+ 'заполнять поле реферера', function (done) {
var referrer = 'http://localhost:3000/tours/oregon-coast';
browser.visit(referrer, function () {
browser.clickLink('.requestGroupRate', function () {
assert(browser.field('referrer').value
=== referrer);
done();
});
});
});
test('посещение страницы "Запрос цены для групп" напрямую '
+ 'должен приводить к пустому полю реферера', function (done) {
browser.visit('http://localhost:3000/tours/request-group-rate',
function () {
assert(browser.field('referrer').value === '');
done();
});
});
});
В файлах .hbs(views) класс requestGroupRate указан.
main.handlebars.hbs:
<!doctype html>
<html>
<head>
<title>Articlety</title>
{{#if showTests}}
<link rel="stylesheet" href="/vendor/mocha.css">
{{/if}}
<script src="//code.jquery.com/jquery-2.0.2.min.js"></script>
</head>
<body>
<header><img src="/img/logo.png" alt="Логотип Meadowlark Travel"></header>
{{{body}}}
{{#if showTests}}
<div id="mocha"></div>
<script src="/vendor/mocha.js"></script>
<script src="/vendor/chai.js"></script>
<script>
mocha.ui('tdd');
var assert = chai.assert;
</script>
<script src="/qa/tests-global.js"></script>
{{#if pageTestScript}}
<script src="{{pageTestScript}}"></script>
{{/if}}
<script>mocha.run();</script>
{{/if}}
</body>
</html>
Кто использовал данную книгу или сталкивался с данной проблемой, подскажите пожалуйста, как её решить.
Не отрабатывает только первый тест. Результат теста.
Ответы (2 шт):
Вы задали очень интересный вопрос, пожалуй, самый интересный в этом году и, так как моё мнение не поместится в комментарий, я вынужден написать ответ, в котором не будет решения вашей проблемы.
Книга, которую вы взяли для занятий, издана в 2014 году, это -- тёмные времена node.js версий 0.10 - 0.12.
Authorized Russian translation of the English edition of Web Development with Node and Express, ISBN 9781491949306 © 2014 Ethan Brown
node.js является очень активно развивающейся экосистемой и с тех времён в node.js изменилось большое количество фундаментальных вещей и невероятное количество нефундаментальных. Более того, с тех пор в спецификации языка javascript изменилось невероятное количество вещей.
Не смотря на то, что основной паттерн организации серверного node.js-приложения изменился мало, изменилось буквально всё в реализации этого паттерна. И в 2021 году практически невозможно, без дополнительных трудозатрат и разочарований, исследовать реализацию паттерна на модулях версий 2013-2014 годов.
Можно плюнуть на то, что книга обучит вас программировать на node.js бронзового века (дальше - цитата автора книги из 2016 года)
all chapters in the repo (with the version listed in package.json: ~2.0.0-alpha31) work correctly and pass all tests in Linux (Ubuntu 14.04.02 LTS, Node 4.2.2, npm 2.14.7)
Но каждая глава этой книги с каждым годом прирастает issies в репозитории примеров. Вот, например, ветка вашей 5той главы. Отдельная. Ветка. О. Проблемах. С. Кодом. 5той. Главы. А вот ещё одна.
Эта книга может показать вам как сделать приложение, она вполне хороша. Но это будет очень нелёгкой дорогой из-за затруднений, подобных тому, с которым вы столкнулись. И в итоге вы будете как токарь-токарного-станка переучиваться на владение станком с ЧПУ.
Простите, вышло очень пафосно. Просто, вы попали в ситуацию, когда безнадёжно устарел вполне хороший учебник.
кстати, у этой книжки есть второе издание. и, если заглянуть в код 5-той главы, там снова отставание от реальности года на 3. зато автор научился в Promise и async/await, а это уже ЧПУ ?
qa/tests-crosspage.js:
test('запрос расценок для групп со страницы туров по реке Худ '
+ 'должен заполнять поле реферера', function (done) {
var referrer = 'http://localhost:3000/tours/hood-river';
browser.visit(referrer, function(){
browser.clickLink('.requestGroupRate', function(){
assert(browser.resources[0].request.headers._headers[0][1] === referrer);
done();
});
});
});
Источник ответа:[Chapter 05 - First Mocha Test] (https://github.com/EthanRBrown/web-development-with-node-and-express/issues/58) Пост от 9 апреля.