用茉莉花测试棱角分明的工厂

时间:2013-08-15 10:07:49

标签: unit-testing angularjs tdd jasmine

我遇到了茉莉和角的问题。我必须测试我的工厂。 我在plunker上制作了简化的项目。 这是演示应用程序: http://plnkr.co/edit/Agq4xz9NmYeEDWoJguxt 这是演示测试: http://plnkr.co/edit/ALVKdXO00IEDaKIjMY6u 第一个问题是如何在没有任何规范测试的情况下使规范转换器工作。

当你运行demo test plunker时,你会看到错误:

  

TypeError:http://run.plnkr.co/Kqz4tGMsdrxoFNKO/app.js(第39行)中未定义myDataRaw

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:2)

问题是

在您的生产代码中

var dataLoadedPromise = $http.get('myData.xml', {transformResponse: transformResponse});

你希望从服务器返回的是XML数据而不是json,所以当你模拟HTTP时,你应该使用XML而不是Json。

以下是工作代码:

describe("controller: MyController", function () {

    beforeEach(function () {
        module("myApp");
    });

    var dataFactory;

    beforeEach(inject(function ($injector, $controller, $rootScope, $location, $httpBackend) {
        this.$location = $location;
        this.$httpBackend = $httpBackend;
        this.scope = $rootScope.$new();
        dataFactory = $injector.get('dataFactory');

        this.$httpBackend.expectGET('myData.xml').respond(
            "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><myData><persons><person><firstName>Pera</firstName><lastName>Peric</lastName><email>perica@gmail.com</email><score>22</score></person></persons></myData>");

        $controller('MyController', {
            $scope: this.scope,
            $location: $location,
            myData: dataFactory
        });
    }));

    afterEach(function () {
        this.$httpBackend.verifyNoOutstandingRequest();
        this.$httpBackend.verifyNoOutstandingExpectation();
    });

    describe("successfully parsed persons", function () {
        it("should have 2 persons", function () {

            dataFactory.getData();
            this.$httpBackend.flush();
        });
    });
});

Updated Demo