2016-07-29 15 views
0

Ich habe eine Methode für mein Controller definiert, wieWie bekomme ich die Parameter von einem HTTP-Requests beim Unit-Test in angularjs?

$scope.submitForm = (username, password) =>{ 
    $http({ 
     method: 'post', 
     url: 'balabala', 
     params: {username, password} 
    }).success(res => { /* */ }); 
} 

Meine Testspezifikt wie folgt aussehen:

descript('myController',() => { 
    beforeEach(module('myModule')); 

    let controller, httpBackend, http, scope; 

    beforeEach(inject(($controller, $httpBackend, $http, $scope) => { 
     scope = $scope.$new(); 
     httpBackend = $httpBackend; 
     http = $http; 
     controller = $controller; 

     httpBackend.when('POST', '/login') 
      .respon({ 
       result: 'ok' 
      }); 
    })); 

    it('should POST login',() => { 
     httpBackend.expectPOST('/login'); 
     const myController = controller('myController', { 
      $scope: scope, 
      $http: http 
     }); 
     scope.submitForm(); 
     httpBackend.flush(); 
    }); 
}); 

Wie kann ich sicherstellen, dass username und password gebucht wurden?

// EDIT: Wie bewerte ich den Körper der POST-Anfrage?

const data = { foo: "1", bar: { x: "2" } }; 

httpBackend.expectPOST('http://example.com').respond((method, url, data, headers, params) => { 
    console.log(method, url, data, headers, params); 
}); 

http({ 
    url: 'http://example.com', 
    method: 'POST', 
    data 
}); 

Der Ausgang ist:

'POST', 'http://example.com', 'foo = 1 & bar = 2', Object {Accept: ‚application/js auf, text/plain, /‘Content-Type: 'application/x-www-form-urlencoded; charset = u tf-8'}, undefined

Antwort

0

einen Antwortwert hinzufügen assoziiert posten dh

httpBackend.expectPOST('/login').respond({success:true}); 

Und verwenden Sie nicht, wann denn expectPost dafür sorgen wird, dass Sie das post-Methode aufrufen, wenn nicht, wird es einen Fehler aus, wenn Sie keine Fehler übernehmen werden immer dann, dass post-Methode aufgerufen wurde.

$httpBackend .whenGET('/testpath/testurl/z/values?max=10&min=1').respond(function(method, url, data, headers, params) { 

// params will be { 
// max: 10, 
// min: 1 
// } 

});

+0

Wissen Sie, wie man params und body erhält, wenn Sie httpBackend benutzen? – Zen

+0

Eine Frage, wie bewerte ich den Körper der POST-Anfrage? Ich habe meine Frage bearbeitet .. – Zen

+0

können Sie nicht direkt tun, müssen Sie einen Anruf haben. –