Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在karma jasmine中测试$http.post方法_Angularjs_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Angularjs 在karma jasmine中测试$http.post方法

Angularjs 在karma jasmine中测试$http.post方法,angularjs,unit-testing,jasmine,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Jasmine,我的控制器中有如下功能: 控制器 'use strict'; define(['angular', 'app/controllers'], function (angular, controllers) { console.log("Loading controller:"); controllers.controller('MyCtrl', function ($scope, $window, $timeout, $log, $location, $route, $rout

我的控制器中有如下功能:

控制器

'use strict';

define(['angular', 'app/controllers'], function (angular, controllers) {
    console.log("Loading controller:");

    controllers.controller('MyCtrl', function ($scope, $window, $timeout, $log, $location, $route, $routeParams, $http) {

    $scope.saveWorkflowTRIGGERS = function(saveCall) {
        var url = BASE_APP_PATH + "trigger/save";

        $http.post(url, $scope.triggers).success(function(data) {

            console.log("savedTriggers");
            console.log(data);
        });
    };
  });
  });
如何对此进行单元测试,以便模拟和调用post方法。目前,我有以下内容,其中不包括后电话的成功部分

define(['angular-mocks', 'jquery', 'app/app'], function(angularmocks, $, app){
describe('Unit: Testing Controller', function(){
    var ctrl;
    var scope;
var rootScope;
var mockHttp;

BASE_APP_PATH='some path/';

beforeEach(angular.mock.module('myApp'));

beforeEach(angular.mock.inject(function($rootScope, $window, $httpBackend){
    scope = $rootScope.$new();
    rootScope = $rootScope;

    mockHttp = $httpBackend;

}));

it ('should save triggers', function(){

    inject(function ($controller) {
        ctrl = $controller('MyCtrl', {
            $scope: scope
        });

        var url = BASE_APP_PATH + 'trigger/save';

        mockHttp.whenPOST(url, 'mockData').respond(201, 'success');
        mockHttp.expectPOST(url).respond(201, 'success');
        scope.save(true); 
        mockHttp.flush();
    });
});

});
});

乍一看,似乎您正在调用一个save函数,而您的函数名为
saveWorkflowTRIGGERS
。我想这就是为什么你会得到“TypeError:undefined不是一个函数”

你应该在save调用之后有
作用域。$digest()
,它将解决挂起的http调用。

一旦调用了测试中的方法,你就需要调用flush来刷新挂起的请求。用flush编辑原始的。但是获取异常“TypeError:undefined不是一个函数”我不知道测试用例是如何编写的,只看它的一部分。你能告诉我所有的完整测试用例和控制器是否可行吗?用控制器和完整测试用例编辑qs。