1

セットアップ: Karma、Browserify、Jasmine、Angular。

私は Angular サービスをテストしようとしていますが、それは今度は別のサービスを使用します。

ここで、モック インジェクションが行われる前に作成された ItemLocalStorageService の別のインスタンスを取得しているように感じます。

ItemLocalStorageService.js

'use strict';

var _ = require('underscore'),
    LOCALSTORAGE_LIST_KEY = 'items.list',
    items;

module.exports = [
    'StoreService',
    function (StoreService) {
        var getAll = function () {
            if (StoreService.enabled) {
                items = StoreService.get(LOCALSTORAGE_LIST_KEY);
            }

            return items;
        };

        var saveAll = function (latestItems) {
            if (StoreService.enabled) {
                StoreService.set(LOCALSTORAGE_LIST_KEY, latestItems);
            }

            items = latestItems;
        };

        return {
            getAll: getAll,
            saveAll: saveAll
        };
    }
];

ItemLocalStorageServiceTest.js

// Main application file. This is loaded here
// instead of being added to Karma's files array
// because of the Browserify setup. 
require('scripts/app');

var mock = require('angular').mock;

describe('ItemLocalStorageService', function () {
    var ItemLocalStorageService,
        items,
        mockStoreService;

    beforeEach(mock.module('myApp'));
    beforeEach(mock.module('myTemplates'));

    beforeEach(function () {
        items = [ {}, {}, {} ];
        mockStoreService = {
            'store': {
                enabled: false,
                get: jasmine.createSpy('store.get').and.returnValue(items),
                set: jasmine.createSpy('store.set')
            }
        };

        // Either of these two should work, I believe.
        // 1
        // mock.module({ 'StoreService': mockStoreService })''

        // 2 
        mock.module(function($provide) {
            $provide.value('StoreService', mockStoreService);
        });
    });

    describe('Local storage', function () {
        it('should return items from local storage', function () {
            mock.inject(function (_ItemLocalStorageService_) {
                ItemLocalStorageService = _ItemLocalStorageService_;
            });

            expect(ItemLocalStorageService.getAll()).toEqual(items);
            expect(mockStoreService.store.get).toHaveBeenCalled();
        });
    });
});

どちらの期待も失敗します。の出力getAllは、私が提供するモック出力ではなく、ブラウザーのローカル ストレージの実際のコンテンツです。私は明らかに何か間違ったことをしているので、私を正しい方向に導くための指針を喜んで受け入れます.

4

0 に答える 0