2

質問のより単純なバージョンを解釈しようとしました。
1)コントローラー(myController)メソッド(減算)のユニットテストを書いています。
2) httpbackend を使用して http をモックする 減算メソッドで http の成功関数に 200 の応答を返し、ダミーの DELETE URL の成功関数でその値を下げたい (テスト環境の外では常に成功する)。
3)しかし、expect(scope.testvalue) は 5 のみであることがわかります。どんな助けでも大歓迎です。

'use strict';
describe('MyController UNIT TEST specs ', function () {    
var scope, http, location, ctrl, httpBackend;
beforeEach(module('myApp', 'ui.router')); 

beforeEach(inject(function ($rootScope, $http, $controller, $httpBackend) {
    scope = $rootScope.$new();
    http = $http;
    httpBackend = $httpBackend;
    ctrl = $controller('myController', { $scope: scope, $http: http});
    httpBackend.when('DELETE', 'url').respond(200, 'fsdf');
}));

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

it('test 1 : Subtract 1 from a value enter code here` using subtract method in myController', function () {
    httpBackend.when('DELETE', 'url').respond(200);
    var testvalue = 5;
    scope.subtract(testvalue);
    expect(testvalue).toBe(4);
});
});
angular.module("myApp").controller("myController", function ($scope, $http) {    
    $scope.subtract = function (testValue) {    
        $http({
            method: 'DELETE',
            url: 'url'
        }).then(function (data) { //success    
            //irrespective of data subtract 1 here     
            testValue - 1 = 4;    
        }, function (errResult) { //fail
            console.log(errResult);
        });
    }
})

表示されるエラーは (予想される) エラーです: false が true であると予想されます。

4

1 に答える 1

3

angular-mock を使用した単体テストでは、次httpBackend.flush()のような結果を期待する前に、手動で呼び出して http 要求/応答のシミュレートを開始する必要があります。

it('test 1 : Subtract 1 from a value enter code here` using subtract method in myController', function () {
    httpBackend.when('DELETE', 'url').respond(200);
    var testObj = { testValue: 5 };
    scope.subtract(testObj);
    httpBackend.flush();
    expect(testObj.testValue).toBe(4);
});

また、http コールバックは を変更しません。 inが変更さscope.testvalueれることを期待している場合、コールバックは次のようになります。testvaluescope

$scope.subtract = function (testObj) {
    $http({
        method: 'DELETE',
        url: 'url'
    }).then(function (data) { //success
        //irrespective of data subtract 1 here
        testObj.testValue = testObj.testValue - 1;
    }, function (errResult) { //fail
        console.log(errResult);
    });
};

完全な動作例については、http: //plnkr.co/edit/kFt5vV8zCtZpfJvduujc?p=previewを参照してください。

于 2014-07-15T11:57:47.937 に答える