在angularjs中进行单元测试时,如何从http请求中获取params

How to get the params from an http requests when unit testing in angularjs?

本文关键字:http 获取 params 请求 angularjs 单元测试      更新时间:2023-09-26

我已经为我的控制器定义了一个方法,比如

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

我的测试规格看起来像:

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();
    });
});

如何确保usernamepassword已发布?

//编辑:如何评估POST请求的主体?

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
});

输出为:

'发布','http://example.com','foo=1&bar=2',对象{Accept:'application/json,text/plain,/',内容类型:'application/x-www-form-urlencoded;字符集=utf-8'},未定义

添加与post相关的响应值,即

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

不要使用when,因为expectPost会确保您正在调用该post方法,如果没有,它会抛出一个错误,如果您没有得到错误,那么假设已经调用了post方法。

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

});