首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将服务注入其角度单元测试。

不能将服务注入其角度单元测试。
EN

Stack Overflow用户
提问于 2016-02-17 15:47:48
回答 2查看 2.6K关注 0票数 2

我正在尝试使用以下方法来测试一个角服务:

  • angular 1.3.8
  • angular-mocks 1.3.8
  • karma 0.13.19
  • jasmine 2.4.1
  • node 0.10.33
  • OS: Windows 7
  • Browser: PhantomJS 2.1.3

问题是,我希望测试的服务(MyService)不是通过角度模拟库(即'inject‘方法什么都不做)注入到测试文件中的。我的代码如下:

main.js

代码语言:javascript
复制
(function() {
    'use strict';

    angular.module('module', [ 'ngCookies', 'ngSanitize' ]);
})();

service.js

代码语言:javascript
复制
(function () {
    'use strict';

    angular.module('module')
        .factory('MyService', MyService);

    MyService.$inject = ['Dependency'];

    function MyService(Dependency) {
        return {
            method: method
        };

        function method() {
            // do something
        }
    }
})();

service.spec.js

代码语言:javascript
复制
(function () {
    'use strict';

    describe('MyService', function () {
        var deferred;
        var MyService;
        var DependencyMock = {};

        beforeEach(module('module'));

        beforeEach(module(function ($provide) {
            $provide.value('Dependency', DependencyMock);
        }));

        beforeEach(inject(function (_MyService_, $q) {
            MyService = _MyService_; // nothing is injected here
            deferred = $q.defer(); // nothing is injected here
        }));

        it('should be injected', function () {
            console.log(deferred); // logs 'undefined'
            expect(MyService).toBeDefined(); // fails
        });

        describe('method', function () {
            it('should have this method', function () {
                expect(MyService.method).toBeDefined();  // fails as MyService is undefined
                expect(typeof MyService.method).toBe('function');
            });
        });
    });
})();

karma.conf.js

代码语言:javascript
复制
    // list of files / patterns to load in the browser
    files: [
      'libs/angular/angular.js',
      'libs/angular-mocks/angular-mocks.js',

      'src/js/main.js',
      'src/js/services/service.js',

      'src/js/tests/unit/service.spec.js'
    ]

package.json

代码语言:javascript
复制
 "devDependencies": {
    "bower": "1.7.7",
    "grunt": "0.4.5",
    "grunt-contrib-clean": "0.7.0",
    "grunt-contrib-concat": "0.5.1",
    "grunt-contrib-connect": "0.11.2",
    "grunt-contrib-copy": "0.8.2",
    "grunt-contrib-cssmin": "0.14.0",
    "grunt-contrib-jshint": "0.12.0",
    "grunt-contrib-less": "1.1.0",
    "grunt-contrib-uglify": "0.11.0",
    "grunt-karma": "0.12.1",
    "grunt-lesshint": "1.1.1",
    "grunt-ngdocs": "0.2.9",
    "grunt-processhtml": "0.3.9",
    "jasmine-core": "2.4.1",
    "karma": "0.13.19",
    "karma-cli": "0.1.2",
    "karma-coverage": "0.5.3",
    "karma-jasmine": "0.3.6",
    "karma-phantomjs-launcher": "1.0.0",
    "karma-spec-reporter": "0.0.24",
    "phantomjs-prebuilt": "2.1.3"
  }

bower.json

代码语言:javascript
复制
"devDependencies": {
    "angular": "1.3.8",
    "angular-animate": "1.3.8",
    "angular-cookies": "1.3.8",
    "angular-mocks": "1.3.8",
    "angular-soap": "2.1.1",
    "bootstrap": "3.3.6",
    "font-awesome": "4.5.0",
    "angular-translate": "2.9.0",
    "angular-sanitize": "1.3.8"
}

我猜想这与angular-mocks有某种关系。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 16:16:42

我已经解决了问题。似乎其中一个角度模块依赖项不包括在Karma中,这导致了“注入”无法工作。

票数 2
EN

Stack Overflow用户

发布于 2016-02-17 16:00:31

尝试在每个it()方法中注入一个服务实例。

例:

代码语言:javascript
复制
it('should be injected', inject(function ('MyService') {
        console.log(deferred);
        expect(MyService).toBeDefined();
    }));

    describe('method', function () {
        it('should have this method', inject(function ('MyService') {
            expect(MyService.method).toBeDefined(); 
            expect(typeof MyService.method).toBe('function');
        }));
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35461397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档