通过Grunt在Jasmine测试中加载AngularJS模块

用户名

我正在尝试为AngularJS服务编写一些单元测试。我想通过Grunt从命令行运行单元测试。为了做到这一点,我编写了以下内容:

gruntfile.js

'use strict';
module.exports = function (grunt) {
    grunt.initConfig({
        jasmine: {
            service: {
                src: 'dist/myService.js',
                options: {
                    specs: 'test/*.js',
                    vendor: [
                        'bower_components/angularjs/angular.min.js',
                        'bower_components/angular-mocks/angular-mocks.js'
                    ]
                }
            }
        }
    });

    // load all grunt task details
    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', ['jasmine:service']);    
};

dist / myService.js

'use strict';
angular.module('myModule')
    .factory('$myService', function () {    
        return {    
            getResult: function () {
                return 3;
            }
        };
    })
;

测试/serviceTests.spec.js

describe('myModule', function() {
    beforeEach(function() {
        console.log('loading module...');
        module('myModule');
    });

    describe('$myService', function () {
        it('should work', function () {
            console.log('testing');
            expect(1 + 2).toEqual(3);
        });
    });
})

当我尝试运行此命令时,出现以下错误:

Running "jasmine:service" (jasmine) task
Testing jasmine specs via PhantomJS

>> Error: [$injector:nomod] http://errors.angularjs.org/1.2.22/$injector/nomod?p0=myModule at
>> ..\..\..\C:\source\myModule\bower_components\angularjs\angular.min.js:20
>> ..\..\..\C:\source\myModule\bower_components\angularjs\angular.min.js:21
>> ..\..\..\C:\source\myModule\dist\myService.js
 myModule
   $myService
     - should work...
log: loading module...

log: testing
     √ should work

我知道,为了测试我的服务,我需要注入它。但是,这时,我在加载模块本身时遇到了错误。因此,我知道我无法提供服务。但是,我不知道为什么该模块无法加载。我已经确认我具有正确的src值。

有人可以告诉我我做错了什么吗?或者,也许让我指出在AngularJS中测试服务的最小示例(包括Grunt等)?

我只是不明白我的方法出了什么问题。谢谢您的帮助。

亚历山大·普赫科夫(Alexander Puchkov)

当您调用angular.module('myModule')(不带第二个参数)时,Angular会尝试引用已经存在的模块,但找不到它。

要声明一个新模块,您应该调用angular.module('myModule',[])(带有两个参数)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章