0

私は Angular での単体テストが初めてで、テストを開始することさえ困難です。リモート API を呼び出して通貨のリストを取得するサービスを呼び出し、返されたオブジェクトをシンボル プロパティで拡張してスコープ変数に割り当てるコントローラーがあります。

httpBackend のチュートリアルをたくさん見てきましたが、それらがうまくまとまっていません。whenGet と expectGet を使用する必要があることはわかっていますが、それらが何であるか、いつ使用する必要があるか、または何をテストする必要があるかさえ理解していません-リクエスト、レスポンス? それらは it 関数の beforeEach 関数にあるべきですか?

コントローラー:

whiskyControllers.controller('currencyCtrlr', ['$scope', 'CurrencyConversion', 'UpdateMiniBasket', 'whiskyList',
    function($scope, CurrencyConversion, UpdateMiniBasket, whiskyList){

        $scope.getCurrencies = function(e){
            e.preventDefault();

            CurrencyConversion.async().then(function(d) { 

                $scope.rates = d.data.rates;

                for(var i = 0, j = $scope.rates.length; i < j; i++){
                    $scope.rates[i]['symbol'] = insertSymbol($scope.rates[i].to);
                }
            });
        }
}]);

以下のテストの大部分を別のチュートリアルからコピーしましたが、それでも「エラー: フラッシュする保留中の要求はありません」で失敗します

テスト:

describe('currencyCtrlr: getCurrencies', function() {
    var scope, CurrencyConversion, UpdateMiniBasket, whiskyList, $httpBackend, $rootScope, createController,
        url = 'http://api.exchangeratelab.com/api/current/GBP?apikey=F06383D65BCBFF52629D059B7D3EEB7D&callback=JSON_CALLBACK';

    beforeEach(module('whiskyControllers'));

    beforeEach(function () {
        module(function ($provide) {
            $provide.value('CurrencyConversion', CurrencyConversion);
            $provide.value('UpdateMiniBasket', UpdateMiniBasket);
            $provide.value('whiskyList', whiskyList);
        });
    });

    beforeEach(inject(function($injector) {
        //scope = $rootScope.$new();
        $httpBackend = $injector.get('$httpBackend');
        $httpBackend.when('GET', url).respond({}, {});

        $rootScope = $injector.get('$rootScope');
        var $controller = $injector.get('$controller');

        createController = function() {
            return $controller('currencyCtrlr', {'$scope' : $rootScope });
        };
    }));

    it('should make an ajax call to http://api.exchangeratelab.com', function() {
        $httpBackend.expectGET(url);
        var controller = createController();
        $httpBackend.flush();
    });

    afterEach(function() {
        $httpBackend.verifyNoOutstandingExpectation();
        $httpBackend.verifyNoOutstandingRequest();
    });

});

どんな助けでも本当に感謝します

4

1 に答える 1