【问题标题】:How to write jasmine unit test for an angularJS factory method without mocking it如何在不模拟的情况下为 angularJS 工厂方法编写 jasmine 单元测试
【发布时间】:2019-12-12 17:36:03
【问题描述】:

我想在不模拟实际方法调用的情况下对工厂方法进行单元测试。我该怎么做?

下面是我的工厂,我需要在不模拟的情况下测试工厂方法。

angular
    .module('core.app')
    .factory('storageService', storageService);

function storageService() {
    var service = {
        getItem: getItem
    };

    return service;

    function getItem(keyName) {
        var data = sessionStorage.getItem(keyName);
        return JSON.parse(data);
    }
};

下面是我的 spec.ts 文件。不确定,我在哪里犯错。当我运行测试时,我收到错误'TypeError: Cannot read property 'getItem' of undefined'

导入'茉莉花';

从“角度”导入*作为角度;

导入“角度模拟”;

describe("reddit api 服务", function() {

var storageService: any;


beforeEach(function () {
    angular.module('app.core');
});

beforeEach(inject(function (_storageService_) {
    storageService = _storageService_;
}));

it('returns ranks', inject(function () {
    var res = storageService.getItem('sdfsdf');
    expect(res).toEqual(5);
}));

});

【问题讨论】:

    标签: angularjs unit-testing jasmine


    【解决方案1】:
    it('should parse json stored in session storage') {
      sessionStorage.setItem('key', '{"hello": "world"}');
    
      expect(storageService().getItem('key').hello).toBe('world');
    }
    

    【讨论】:

    • 可以像 storageService() 一样直接调用工厂吗?我正在考虑创建或注入工厂实例。
    • 所以你的问题不是如何测试你的服务,而是如何在测试中注入它?见code.angularjs.org/1.6.9/docs/api/ngMock/function/…
    • 我的最终目标是测试服务方法。但我很好奇您建议的代码使用 storageService() 直接调用该服务。如果没有服务实例,它会工作吗?此外,服务和 spec.ts 文件都在同一个文件夹中。在这种情况下我需要加载模块吗?
    • 因为我不记得如何在 AngularJS 单元测试中注入服务,而且你的函数似乎被定义为全局函数。
    • storageService().getItem('key').hello 给出错误'找不到名称 storageService'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多