【问题标题】:Angular service not injected in unit testAngular 服务未在单元测试中注入
【发布时间】:2015-01-29 09:58:25
【问题描述】:

您好,我有一个简单的测试:

define(["angular", "angularMocks", "app", "normalizer"], function(angular, mocks, app) {

  describe("service: normalizer", function () {
    var normalizerService;

    beforeEach(module("ADB"));

    beforeEach(inject(function(_normalizer_) {
      normalizerService = _normalizer_;
    }));

    var params = {};
    var metadata = {};
    var data = {};

    var response = normalizerService.topLanguagesHybrid(metadata, data, params);

    var type = typeof response;
    expect(type).toEqual("object");

  });
});

问题是规范化器服务从未被设置,并且在 cmd 中我看到以下错误:

 TypeError: 'undefined' is not an object (evaluating 'normalizerService.topLanguagesHybrid')

注意:我在这个项目中使用了 requirejs,我可以看到规范化器服务文件正在加载到浏览器中(及其所有依赖项)。它似乎只是没有注入。 我做错了什么?

Link to error

【问题讨论】:

    标签: javascript angularjs unit-testing requirejs karma-runner


    【解决方案1】:

    当你定义服务时,你忘了定义规范器,所以正确的语法是

    define(["angular", "angularMocks", "app", "normalizer"], function(angular, mocks, app, normalizerService) {
    
      describe("service: normalizer", function () {
        var normalizerService;
    
        beforeEach(module("ADB"));
    
        var params = {};
        var metadata = {};
        var data = {};
    
        var response = normalizerService.topLanguagesHybrid(metadata, data, params);
    
        var type = typeof response;
        expect(type).toEqual("object");
    
      });
    });
    

    【讨论】:

    • 我遇到了同样的错误 + 加上这个新错误:service: normalizer encountered a declaration exception FAILED
    • 这是同样的错误:(。我想我必须以某种方式注入它。感谢您的帮助
    • 似乎 ngSanitize 脚本文件未包含在您的测试运行程序中或模块未加载,您是否在 ADB 模块中使用 ngSanitize?如果是,请尝试将其添加为依赖项。
    【解决方案2】:

    对于测试场景,您忘记定义 it,beforeEach 在每个“it”函数之前运行。

    define(["angular", "angularMocks", "app", "normalizer"], function(angular, mocks, app) {
    
      describe("service: normalizer", function () {
        var normalizerService;
    
        beforeEach(module("ADB"));
    
        beforeEach(inject(function(_normalizer_) {
          normalizerService = _normalizer_;
        }));
    
        it('should define topLanguageHybrid method', function() {
          var params = {};
          var metadata = {};
          var data = {};
    
          var response = normalizerService.topLanguagesHybrid(metadata, data, params);
    
          var type = typeof response;
          expect(type).toEqual("object");
        });
      });
    });
    

    更多关于茉莉花的信息:jasmine docs

    【讨论】:

    • 仍然收到提示注入服务存在问题的错误
    • 这是我在控制台中看到的错误:prntscr.com/5ygtz8。我正在使用您发布的代码。
    • 查看问题的错误链接(角度错误解释)
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 2012-08-31
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2019-05-06
    相关资源
    最近更新 更多