Mockjax在角度app中使用

时间:2013-12-17 12:55:36

标签: angularjs mockjax

我是AngularJS的新手。

我可以使用$ http服务方法get / post调用模拟端点,在AngularJS中使用mockjax。 如果没有,是否有一种方式$ http提供了一种创建端点并调用它们的方法?

例如 MockService就是这样的

$.mockjax({
    url: '/sometest/abc',
    type: 'post',
    responseTime: 2000,
    responseText: {
        LoginSuccessful: true,
        ErrorMessage: "Login Successfuly",
        Token: "P{FsGAgtZT7T"
    }
});

我创建的DataService如下所示。

'use strict';

//Data service
angular.module('app').factory('dataService',['$http', function($http){

    var restCall = function (url, type, data, successCallback, errorCallback) {
        $http({
            method: type,
            url: url,
            data: data,
        }).
        success(function (data, status, headers, config) {
            successCallback(data);
        }).
        error(function (data, status, headers, config) {
            errorCallback(data)
        });
    };

    return {
        getTemplate: function (success, error) {
            restCall('/sometest/abc', 'GET', null, success, error);
     }
    };
}]);

控制器位于

之下
angular.module('App').controller('mainCtrl', ['$scope', 'trackService', 'dataService',
        function ($scope, TrackService, ds) {

            ds.getTemplate(function (data) {
                //do some calculation
            }, function () {
                console.warn('Something is not right');
            });}]);

我想知道这是使用$ http的正确方法,或其他应该做的事情。这是我试图在实际代码中实现的,但不是在使用jasmine的单元测试中。

1 个答案:

答案 0 :(得分:1)

I had to do this recently我发现使用Angular的内置内容(angular-mocks)非常简单。

这是基本的想法:你在测试工具中包含一个单独的模块来模拟你的请求,它是一个基本的URL匹配器,带有字符串或正则表达式......

// in some other file that you include only for tests...
var myTestApp = angular.module('myApp', ['myApp']);

myTestApp
  .config(function ($provide, $httpProvider) {
    // Here we tell Angular that instead of the "real" $httpBackend, we want it
    // to use our mock backend
    $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
  })
  .run(function ($httpBackend) {

     $httpBackend.whenGET('/some/url')
       .respond(function (method, url, requestData, headers) {
         // Do whatever checks you need to on the data, headers, etc

         // Then return whatever you need to for this test.
         // Perhaps we want to test the failure scenario...
         return [
           200,                       // Status code
           { firstname: 'Jordan' },   // Response body
           {}                         // Response headers
         ];
       });
  });

检查上面的第一个链接,阅读我的博文。