javascript - 为什么我会收到此 Angular-Mock 错误并且 Mocha 测试未运行

标签 javascript angularjs mocha.js chai angular-mock

我收到此处发现的确切错误:(window.beforeEach || window.setup) is not a function 。然而修复不起作用author of the tutorial series here甚至提到了相同的修复。

这是 Tuts+ 作者的修复: enter image description here

这只是将 angular-mock 脚本标记放置在 MochaiChai 脚本之后。我在下面这样做了:

enter image description here

测试/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'
            }
        }
    });
});

最佳答案

index.html 文件中,在调用 mocha.setup 之前包含 angular-mocks.js 脚本('bdd')angular-mocks.js 被实现为立即调用的函数表达式,它尝试使用 window.beforeEach。 (https://github.com/angular/bower-angular-mocks/blob/master/angular-mocks.js#L2586)

但是,mocha.js 不会立即调用,必须使用 mocha.setup 函数进行初始化,以便为运行时环境添加其魔力。

尝试颠倒这些脚本标记的顺序,以便在 angular-mocks.js 之前包含并初始化 mocha.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>

关于javascript - 为什么我会收到此 Angular-Mock 错误并且 Mocha 测试未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35461233/

相关文章:

javascript - 为什么我的 ng-repeat 表现得像对象是空的?

javascript - 如何将值从 Controller 外部传递到作用域?

html - 防止浏览器窗口调整大小

node.js - 测试 GraphQL API

javascript - 我添加了三个输入数字的最大值并且它有效但是如何在不丢失最大值的情况下添加递增递减按钮?

javascript - 使用 ngStorage/localstorage 保存键=>值样式

javascript - JS - 如何仅在已经切换的情况下切换 CSS 类

javascript - 将服务器端 mvc 变量传递给 javascript

node.js - 在 Heroku NodeJS 服务器上运行 MochaJS 测试

javascript - 如何在使用 Selenium 框架和 Mocha 的常规测试的同时在浏览器上下文中运行测试?