Почему я получаю эту ошибку Angular-Mock, а тест Mocha не работает

Я получаю точную ошибку, найденную здесь: (window.beforeEach || window.setup) не является функцией. Однако исправление не сработало, автор из серии руководств здесь даже упоминалось то же самое исправление.

Вот исправление автора Tuts+: введите здесь описание изображения

То есть просто поместить тег сценария angular-mock после сценариев Mochai и Chai. Что я и сделал ниже:

введите здесь описание изображения

тест/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Mocha Spec Runner</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="icon" href="../app/favicon.ico">
    <link rel="apple-touch-icon" href="../app/assets/imgs/apple-touch-icon.png">
    <link href="bower_components/mocha/mocha.css" rel="stylesheet">
</head>

<body>

    <div id="mocha"></div>

    <script src="../bower_components/angular/angular.js"></script>
    <script src="../bower_components/mocha/mocha.js"></script>
    <script src="../bower_components/chai/chai.js"></script>
    <!-- see Angular-mocks is here :( -->
    <script src="../bower_components/angular-mocks/angular-mocks.js"></script>

    <script>
        mocha.setup('bdd');
    </script>

    <script src="main.spec.js"></script>

    <script>
        mocha.run();
    </script>

</body>
</html>

Мой файл main.spec.js

/**
 * @name Mocha Test Runner
 * @desc Describes and runs our dashboard tests
 */

var assert = chai.assert;
var expect = chai.expect;

// This Test is designed to fail on purpose
describe('User Login', function() {
    console.log('User Login');
    describe('Login Failed', function() {
        console.log('Login Failed');
        if ('Incorrect login should fail', function() {
            module('loginController')
            inject(function($injector) {
                apiFactory = $injector.get('ApiFactory');
            });

            expect(apiFactory).to.be.an('number');
        });
    });    
});

Мои задачи Gulp

gulp.task('serve', function() {
    return browserSync.init({
        notify : false,
        port   : 3333,
        server: {
            baseDir: ['app'],
            routes: {
                '/bower_components' : 'bower_components'
            }
        }
    });
});

gulp.task('serve-test', function() {
    browserSync.init({
        notify : false,
        port   : 4444,
        server: {
            baseDir: ['test', 'app'],
            routes: {
                '/bower_components' : 'bower_components'
            }
        }
    });
});

person Leon Gaban    schedule 17.02.2016    source источник
comment
Так в чем вопрос?   -  person Pointy    schedule 17.02.2016
comment
Обновлен мой заголовок и код. Почему я получаю эту ошибку, а мой тест не выполняется?   -  person Leon Gaban    schedule 17.02.2016
comment
Только что понял, что этот курс с июля 2015 года, чего я не понимаю, так это того, что я скачал его репозиторий на github, и его тесты проходят нормально! Однако наше приложение не использует Node, оно работает через Python и Apache локально. Не уверен, что это как-то связано с этим, но это расстраивает.   -  person Leon Gaban    schedule 17.02.2016


Ответы (1)


В файл index.html вы включаете сценарий angular-mocks.js перед вызовом mocha.setup('bdd'). angular-mocks.js реализовано как немедленно вызываемое функциональное выражение, которое пытается использовать window.beforeEach. (https://github.com/angular/bower-angular-mocks/blob/master/angular-mocks.js#L2586)

Однако mocha.js не вызывается немедленно и должна быть инициализирована с помощью функции mocha.setup, чтобы добавить свою магию в среду выполнения.

Попробуйте изменить порядок этих тегов сценария на обратный, чтобы mocha.js включалось и инициализировалось перед angular-mocks.js.

    <script src='bower_components/mocha/mocha.js'></script>
    <script src='bower_components/chai/chai.js'></script>
    <script>
        mocha.setup('bdd');
    </script>
    <script src="bower_components/angular-mocks/angular-mocks.js"></script>
person Adam Brown    schedule 17.02.2016
comment
Я уже исправил эту часть, и это все еще происходит :( извините, я, должно быть, опубликовал более старый код раньше ... что сводит меня с ума, так это то, что авторский тест полностью работает, лол. - person Leon Gaban; 17.02.2016
comment
Ну, вот и моя большая идея. Возможно, вы могли бы создать репозиторий git со своим кодом, чтобы я мог попробовать его на своем собственном конце. - person Adam Brown; 18.02.2016
comment
Конечно! github.com/leongaban/test Я, конечно, не добавлял файлы своего приложения, но, может быть, вы можете видите, что здесь не так? - person Leon Gaban; 18.02.2016
comment
В коде репозитория скрипт angular mocks был загружен до mocha.setup(). Я изменил порядок, и это сработало. Я посылаю вам PR только для того, чтобы быть на 100% кристаллом. - person Adam Brown; 18.02.2016
comment
А, спасибо! Теперь я вижу и полностью пропустил чтение, думал, что вы имеете в виду оператор run, но на самом деле это был mocha.setup('bdd'); :) работает сейчас - person Leon Gaban; 18.02.2016
comment
Давайте продолжим обсуждение в чате. - person Adam Brown; 18.02.2016