【问题标题】:Angular/Jasmine: is failing using classes for factory and servicesAngular/Jasmine:使用工厂和服务类失败
【发布时间】:2015-08-25 17:37:38
【问题描述】:

最后,我开始使用 jasmine 进行测试,并成功完成了标准模式下的所有测试。

我试图改变声明我的工厂和服务的方式,就像一个类一样,每个类都有构造函数和必要的参数。现在测试失败了。

我不明白我在浏览器中打开了我的测试并使用 Chrome 设置了断点。在工厂电话中,在服务电话中。最后在测试中,我在 beforeEach 之后和注入内部设置了断点。我在工厂类中设置了一些断点,而 Chrom,e 并没有止步于此。

当我执行测试时,Location 处理程序在 lh 变量中返回 undefined,显然,工厂内的函数调用失败。

我的测试是:

/// <reference path="../../../_references.js" />



describe("Factory - LocalizationHandler", function () {
    var lh;

    beforeEach(module('appCookIn.Factory'));

    beforeEach(function () {
        inject(function (LocalizationHandler, LocalizationService, $http, $q) {
            lh = LocalizationHandler;
        });
    });

    ///
    /// Testea que la funcion de GetConcept la devuelva coorectamente
    ///
    it("LocalizationHandler - GetConcept", function () {
        // Arrange
        var Expected = 'Nombre';
        var json = lh.SetNewCulture("es-ES");

        // Act
        var Result = lh.GetConcept(1);

        // Assert
        expect(Result).toBe(Expected);
    });

    ///
    /// Cambia la localización actual a otra.
    ///
    it("LocalizationHandler - SetNewCulture", function () {
        // Arrange
        var ExpectedCulture = "es-ES";
        var ExpectedResult = true;

        // Act

        var Result = lh.SetNewCulture("es-ES");
        var ResultCulture = lh.GetCurrentCulture();

        // Assert
        expect(ResultCulture).toBe(ExpectedCulture);
        expect(Result).toBe(ExpectedResult);

    });

    it("LocalizationHandler - GetCurrentCulture", function () {
        // Arrange
        var Expected = "es-ES";
        lh.SetNewCulture(Expected);

        // Act
        var Result = lh.GetCurrentCulture();

        // Assert
        expect(Result).toBe(Expected);
    });

});

我的工厂是:

LocalizationHandler = function (LocalizationService, $http, $q) {
    var self = this;

    self.LocalizationItems = null;
    self.culture = "es-ES";

    var res = {
        GetCurrentCulture: function ()
        {
            return self.culture;   
        },
        SetNewCulture: function (culture)
        {
            var data = JSON.parse(LocalizationService.SetNewCulture());

            self.LocalizationItems = data[culture];

            self.culture = culture;

            return self.LocalizationItems != null;
        },
        GetConcept: function (enumerable) 
        {
            if (self.LocalizationItems == null) return;
            return self.LocalizationItems[enumerable];
        }
    }

    self.LocalizationConstructor = function (res) {
        res.SetNewCulture(res.GetCurrentCulture());

    };

    self.LocalizationConstructor(res);

    return res;
 };

app.factory("LocalizationHandler", ["LocalizationService", "$http", "$q", LocalizationHandler]);

我的服务是:

///
/// El servicio de localización trata el tema de la cultura para visualización de variables.
///


LocalizationService = function () {
    var self = this;

    self.LocalizationItems = null;
    self.culture = "es-ES";

    self.SetNewCulture = function () {
        var res = "";

        res += '{';
        res += '"es-ES": {';
        res += '"1": "Nombre",';
        res += '"2": "Llave de entrada"';
        res += '},';
        res += '"ca-ES": {';
        res += '"1": "Nom",';
        res += '"2": "Clau d`entrada"';
        res += '}';
        res += '}';

        return res;
    };

    self.LocalizationServiceCtor = function () {
    }

    self.LocalizationServiceCtor();
}

app.controller("LocalizationService", [LocalizationService]);

【问题讨论】:

  • 我真的看不出你想要达到什么目的。您尝试将 LocalizationService 用作控制器 (app.controller("Local....))

标签: angularjs unit-testing jasmine


【解决方案1】:

我认为您的问题是您试图将“服务”注册为 LocalizationService 底部的控制器。

尝试使用

app.service("LocalizationService", [LocalizationService]);

而不是

app.controller("LocalizationService", [LocalizationService]);

但最后真的不明白为什么要在这个例子中使用服务工厂。也许看看:

Confused about Service vs Factory

【讨论】:

  • 是的,我忘记了服务,我忘记了 appName,它真的是 AppCookIn,我有 appCookIn。 grrr jasmine 没有正确描述错误。
猜你喜欢
  • 1970-01-01
  • 2016-07-04
  • 2016-10-10
  • 2019-12-26
  • 2016-10-22
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多