【问题标题】:angularJS factory testing using a stand-alone jasmine server only仅使用独立的 jasmine 服务器进行 angularJS 工厂测试
【发布时间】:2015-08-05 19:12:08
【问题描述】:

我正在学习如何仅使用独立的 jasmine 服务器编写 AngularJS 测试。 我成功地测试了一个控制器,但是我在测试我写的工厂时遇到了麻烦。我收到一个错误,例如,

Error: [$injector:modulerr] 

(工厂代码)myservice.js:

mod.factory('WeatherService', function ($http) {
    return {
        testingdata: function () {
            return {name: "test", class: "ix"};
        }
};});

app.js

var mod = angular.module("myapp", []);

我的测试:

describe("ws", function () {
    describe('when I call WeatherService', function () {
        it('returns 1', function () {
            var t = {name: "test", class: "ix"};
            var $injector = angular.injector(['myapp']);
            var WeatherService= $injector.get('WeatherService');
            expect(WeatherService.testingdata).toEqual(t);
        });
    });
});

【问题讨论】:

  • 阅读 docs 以在 Jasmine 中正确注入模块和提供程序。有一个系统函数 inject() 可以解决问题

标签: angularjs jasmine angularjs-factory


【解决方案1】:

您的测试过于复杂。

您不要在测试中使用 angular.injector - 您可以使用来自 ngMock 的模块函数

类似地,您可以使用来自 ngMock 模块的函数注入来代替 $injector.get。

describe("ws", function() {

  beforeEach(module('myapp'));

  describe('when I call WeatherService', function() {
    it('returns 1', inject(function(WeatherService) {
      var t = {
        name: "test",
        class: "ix"
      };

      expect(WeatherService.testingdata()).toEqual(t);
    }));
  });
});

这里是工作示例http://plnkr.co/edit/doBJeWRyVyD75LfRP4G4?p=preview

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 2013-09-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多