0

私は AngularJS を使用してアプリケーションを構築しており、現在、アプリケーションのテスト ケースを開発しています。このようなサービスがあるとします。

var app = angular.module('MyApp')
app.factory('SessionService', function () {

    return {
        get: function (key) {
            return sessionStorage.getItem(key);
        },
        set: function (key, val) {
            return sessionStorage.setItem(key, val);
        },
        unset: function (key) {
            return sessionStorage.removeItem(key);
        }
    };
});

このようなサービスのテスト ケースを記述できますか。

beforeEach(module('MyApp'));
    describe('Testing Service : SessionService', function (SessionService) {
        var session, fetchedSession, removeSession, setSession;
        beforeEach(function () {
            SessionService = {
                get: function (key) {
                    return sessionStorage.getItem(key);
                },
                set: function (key, val) {
                    return sessionStorage.setItem(key, val);
                },
                unset: function (key) {
                    return sessionStorage.removeItem(key);
                }
            };
            spyOn(SessionService, 'get').andCallThrough();
            spyOn(SessionService, 'set').andCallThrough();
            spyOn(SessionService, 'unset').andCallThrough();
            setSession     = SessionService.set('authenticated', true);
            fetchedSession = SessionService.get('authenticated');
            removeSession  = SessionService.unset('authenticated');
        });
        describe('SessionService', function () {
            it('tracks that the spy was called', function () {
                expect(SessionService.get).toHaveBeenCalled();
            });
            it('tracks all the arguments used to call the get function', function () {
                expect(SessionService.get).toHaveBeenCalledWith('authenticated');
            });
            //Rest of the Test Cases
        });
    });

このテスト ケースの開発には Jasmine のスパイ メソッドを使用しています。大丈夫ですか、それとも間違っていますか?

4

1 に答える 1

1

良い感じ。しかし、これにはいくつかの問題があると思います:

get: function (key) {
        return sessionStorage.getItem(key);
},

あなたはsessionStorageを嘲笑していません。したがって、このオブジェクトから getItem() を呼び出そうとするとエラーが発生すると思います。テストでのこれらの呼び出しの戻り値には関心がないようです。それらが正しい属性で呼び出されたかどうかのみを確認します。ここみたいに:

it('tracks that the spy was called', function () {
   expect(SessionService.get).toHaveBeenCalled();
});

何かを返すように SessionService のモックを変更してみませんか? このような:

get: function (key) {
        return true;
},

getItem/setItem/removeItem をテストしたい場合は、別のテストケースでこれを行うことができます

于 2013-08-02T18:42:42.457 に答える