【问题标题】:angular-mock testing in Karma+Mocha can't find moduleKarma+Mocha 中的角度模拟测试找不到模块
【发布时间】:2014-06-03 17:58:30
【问题描述】:

我正在学习 AJS 单元测试,包括 RequireJS、Karma、Mocha、Chai 和 angular-mocks。前四个我有一些运气,但需要进入“真正的”测试并且不能让 angular-mocks 工作。有很多事情要做,所以我会尽可能简洁。

test/karma.conf.js

module.exports = function (config) {
    config.set({
        // requirejs may need to be listed before other modules (see https://github.com/princed/karma-chai-plugins#limited-requirejs-support)
        frameworks: ["requirejs", "mocha", "chai"],

        files: [
            // load the RequireJS config files first
            {pattern: "client/app/require-shared.js",                                     watched: false},
            {pattern: "test/require-test.js",                                             watched: false},

            // set included to false for files to be loaded via RequireJS
            {pattern: "client/**/*.js",                                  included: false                },
            {pattern: "bower_components/**/*.js",                        included: false, watched: false},

            // Mocha stuff
            {pattern: "test/unit/mocha.conf.js",                                          watched: false},

            // test files
            {pattern: "test/unit/**/pageSelectorTest.js",                           included: false                }
        ],
        exclude: [
            "client/app/bootstrap.js",
            "client/app/require-main.js",
            "*.conf.js"
        ],

        reporters: ["spec"],

        // enable / disable watching file and executing tests whenever any file changes
        autoWatch: false,

        browsers: [
            "PhantomJS"
        ],

        singleRun: true
    });
};

test/unit/mocha.conf.js

window.mocha.setup({
    ui: "tdd"
});

test/unit/MyTest.js

define([
     "angular-mocks"
    ,"app"
], function () {
    "use strict";

    var MODULE_NAME = "PageSelector";
    var assert = chai.assert;


    suite("Unit testing " + MODULE_NAME, function() {
        suite(MODULE_NAME + " module", function () {
            var appModule;

            setup(function () {
                // "ng" and "ngMock" modules automatically loaded
                appModule = angular.mock.module(MODULE_NAME);
                console.log(appModule);
            });

//          setup(function () {
//              angular.mock.inject(function () {
//
//              });
//          });

            test("should exist", function () {
                assert.isDefined(appModule, "module exists");
            });
        }); // end module tests
    });
});

我将跳过发布所有 RequireJS 配置。我很确定我收到了angularangular-mocks,因为我已经解决了这些错误。

我的 Gruntfile 只是有一个加载 karma.conf.js 的选项。 grunt karma 的输出为:

Running "karma:unit" (karma) task
INFO [karma]: Karma v0.12.16 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket WJUF8xogEo-XCG-8zzJX with id 10483911
PhantomJS 1.9.7 (Linux)
LOG LOG: undefined

  Unit testing PageSelector
    PageSelector module
      ✗ should exist
        AssertionError: module exists: expected undefined to not equal undefined
            at /home/client/node_modules/chai/chai.js:925
            at assertEqual (/home/client/node_modules/chai/chai.js:1402)
            at /home/client/node_modules/chai/chai.js:3627
            at /home/client/node_modules/chai/chai.js:2648
            at /home/client/test/unit/utility/pageSelectorTest.js:37
            at callFn (/home/client/node_modules/mocha/mocha.js:4338)
            at /home/client/node_modules/mocha/mocha.js:4331
            at /home/client/node_modules/mocha/mocha.js:4728
            at /home/client/node_modules/mocha/mocha.js:4819
            at next (/home/client/node_modules/mocha/mocha.js:4653)
            at /home/client/node_modules/mocha/mocha.js:4663
            at next (/home/client/node_modules/mocha/mocha.js:4601)
            at /home/client/node_modules/mocha/mocha.js:4625
            at done (/home/client/node_modules/mocha/mocha.js:4300)
            at callFn (/home/client/node_modules/mocha/mocha.js:4343)
            at /home/client/node_modules/mocha/mocha.js:4331
            at next (/home/client/node_modules/mocha/mocha.js:4626)
            at /home/client/node_modules/mocha/mocha.js:4625
            at done (/home/client/node_modules/mocha/mocha.js:4300)
            at callFn (/home/client/node_modules/mocha/mocha.js:4343)
            at /home/client/node_modules/mocha/mocha.js:4331
            at next (/home/client/node_modules/mocha/mocha.js:4626)
            at /home/client/node_modules/mocha/mocha.js:4630
            at timeslice (/home/client/node_modules/mocha/mocha.js:5763)


PhantomJS 1.9.7 (Linux): Executed 1 of 1 (1 FAILED) ERROR (0.003 secs / 0.002 secs)

Warning: Task "karma:unit" failed. Use --force to continue.

Aborted due to warnings.

如果我将 angular.mock.module(MODULE_NAME); 更改为 angular.module(MODULE_NAME);assert 将起作用。我错过了什么? (如果以上信息不足,我深表歉意。我可以根据需要发布更多信息。)

【问题讨论】:

    标签: angularjs unit-testing mocha.js karma-runner


    【解决方案1】:

    我研究了 angular-mocks.js。 module 只是 inject 的设置。就其本身而言,它实际上并不像angular.module 那样加载模块。我将它不必要地用于“模块级”测试,angular.module 是合适的。

    当进入实际控制器/指令/等时。测试,我需要module+inject 对。

    【讨论】:

    • 您能补充更多信息吗?我也面临同样的问题
    • (angular.mocks.)module 只是初始化注入的东西,所以什么都没有加载。当您不打算使用注入模块来实际加载模块时,您必须使用 angular.module。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多