4

単体テスト:

"use strict";

var usersJSON = {};

describe("mainT", function () {


 var ctrl, scope, httpBackend, locationMock, 

    beforeEach(module("testK"));
    beforeEach(inject(function ($controller, $rootScope, $httpBackend, $location, $injector) {
        scope = $rootScope.$new();
        httpBackend = $httpBackend;
        locationMock = $location;

        var lUrl = "../solr/users/select?indent=true&wt=json",
        lRequestHandler = httpBackend.expect("GET", lUrl);          
        lRequestHandler.respond(200, usersJSON);     

        ctrl = $controller("mainT.controller.users", { $scope: scope, $location: locationMock});
        httpBackend.flush();
        expect(scope.users).toBeDefined();

    }));

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




        describe("method test", function () {
        it('should test', function () {
            expect(true).toBeFalsy();
        });
    });
});

私がテストしているコントローラー(動作中):問題を引き起こしているinitの非同期関数(../solr/users/select?indent = true&wt = jsonを使用):

 $scope.search = function () {
                    var lStart = 0,
                        lLimit = privates.page * privates.limit;


                    Search.get({
                        collection: "users",
                        start: lStart,
                        rows: lLimit)
                    }, function(records){
                        $scope.users= records.response.docs;
                    });
                };


1.バックエンドに、彼が受け取るリクエストを
通知する 2.空のJSONでそのリクエストに対する応答をバックエンドに通知する3.コントローラーを作成します( Search.get
getが実行されます)
4.バックエンドにすべてのリクエストを受信して​​応答するように通知します(流す)

それでも、常に次のエラーが発生します。

Error: Unexpected request: GET : ../solr/users/select?indent=true&wt=json

非同期検索機能の扱いが悪いのでしょうか? これはどのように行うべきですか?

4

3 に答える 3

2

BeforeEach では、httpBackend.expect の代わりに httpBackend.when を使用する必要があります。BeforeEach にアサーション (期待) を含める必要はないと思うので、別の it() ブロックに移動する必要があります。lRequestHandler が定義されている場所もわかりません。200 ステータスはデフォルトで送信されるため、必要ありません。httpBackend 行は次のようになります。

httpBackend.when("GET", "/solr/users/select?indent=true&wt=json").respond({});

テストは次のようになります。

    describe("method test", function () {
        it('scope.user should be defined: ', function () {
            expect(scope.user).toEqual({});
        });
    });
于 2013-09-26T23:45:22.967 に答える