3

私は以下のように私のコントローラに機能を持っています:

コントローラ

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

});
});
4

2 に答える 2

0

一見すると、保存関数を呼び出しているようで、関数は呼び出されsaveWorkflowTRIGGERSます。それが「TypeError: undefined is not a function」を取得している理由だと思います

于 2015-08-27T09:30:52.617 に答える
0

scope.$digest()保留中の http 呼び出しを解決する保存呼び出しの後に必要があります。

于 2015-08-27T17:01:41.287 に答える