【问题标题】:How to get the params from an http requests when unit testing in angularjs?在angularjs中进行单元测试时如何从http请求中获取参数?
【发布时间】:2016-07-29 05:33:59
【问题描述】:

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

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

如何确保username 和password 已发布?

//编辑: 如何评估 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
});

输出是:

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

【问题讨论】:

    标签: javascript angularjs unit-testing mocha.js karma-jasmine


    【解决方案1】:

    添加与帖子相关的响应值,即

    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
    // }
    

    });

    【讨论】:

    • 你知道在使用httpBackend时如何获取params和body吗?
    • 一个问题,如何评估POST请求的正文?我已经编辑了我的问题..
    • 你不能直接做你需要打个电话。
    • 接电话?这是什么?
    • 可能是因为我使用的是旧版本的 angular 1.2.6
    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2023-03-20
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多