4

我要解决的问题是使用 Jasmine 测试我的工厂的能力。

以下是我的应用程序和工厂的副本:

var app = angular.module('app', []);

app.factory('service', function ($http) {
    return {
        getCustomers: function (callback) {
            $http.get('/Home/Customers').success(callback);
        },
        getProfile: function (callback, viewModel) {

            $http.post('/Home/Profiles', JSON.stringify(viewModel), {
                headers: {
                    'Content-Type': 'application/json'
                }
            }).success(callback);
        }
    };
});

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::

我也设置了 jasmine,但在测试上面的“getCustomers”和“getProfile”时遇到了麻烦。

以下是我目前的尝试:

  describe("getCustomers", function (service) {
      beforeEach(module('service'));
         describe('getCustomers', function () {
            it("should return a list of customers", inject(function(getCustomers){
              expect(getCustomers.results).toEqual(["david", "James", "Sam"]);
         }))
      })
  });

如果有人可以提供如何在两个单独的测试中同时测试“getCustomers”和“getProfile”的示例,这将非常有帮助。

亲切的问候。

4

1 回答 1

4

您可以模拟 Http GET 请求并像这样测试服务

describe("getCustomers", function (service) {
    beforeEach(module('app'));

    var service, httpBackend;
    beforeEach(function () {
        angular.mock.inject(function ($injector) {
            httpBackend = $injector.get('$httpBackend');
            service = $injector.get('service');
        })
    });

    describe('getCustomers', function () {
        it("should return a list of customers", inject(function () {
            httpBackend.expectGET('/Home/Customers').respond(['david', 'James', 'Sam']);
            service.getCustomers(function (result) {
                expect(result).toEqual(["david", "James", "Sam"]);
            });
            httpBackend.flush();
        }))
    })
});

Working Demo

于 2013-08-29T21:36:55.687 回答