Как решить проблему с 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 шт):

Автор решения: nörbörnën

Вы задали очень интересный вопрос, пожалуй, самый интересный в этом году и, так как моё мнение не поместится в комментарий, я вынужден написать ответ, в котором не будет решения вашей проблемы.

Книга, которую вы взяли для занятий, издана в 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, а это уже ЧПУ ?

→ Ссылка
Автор решения: lkmatter

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 апреля.

→ Ссылка