Unit testing 茉莉花试验

Unit testing 茉莉花试验,unit-testing,angularjs,tdd,jasmine,Unit Testing,Angularjs,Tdd,Jasmine,我对茉莉花和角有意见。我必须测试我的工厂。 我在plunker上做了一个简单的项目。 以下是演示应用程序: 以下是演示测试: 第一个问题是如何使spec runner在没有任何要测试的规范的情况下工作 运行演示测试plunker时,您将看到错误: TypeError:myDataRaw在http://run.plnkr.co/Kqz4tGMsdrxoFNKO/app.js(第39行)中未定义 有人能帮忙吗 谢谢问题是 在您的生产代码中 var dataLoadedPromise = $http.

我对茉莉花和角有意见。我必须测试我的工厂。 我在plunker上做了一个简单的项目。 以下是演示应用程序: 以下是演示测试: 第一个问题是如何使spec runner在没有任何要测试的规范的情况下工作

运行演示测试plunker时,您将看到错误:

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

有人能帮忙吗

谢谢

问题是

在您的生产代码中

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();
        });
    });
});
描述(“控制器:MyController”,函数(){
beforeach(函数(){
模块(“myApp”);
});
var数据工厂;
beforeach(注入(函数($injector、$controller、$rootScope、$location、$httpBackend)){
此.$location=$location;
这。$httpBackend=$httpBackend;
this.scope=$rootScope.$new();
dataFactory=$injector.get('dataFactory');
这是.httpBackend.expectGET('myData.xml')。响应(
"PeraPericperica@gmail.com22");
$controller('MyController'{
$scope:this.scope,
$location:$location,
myData:数据工厂
});
}));
在每个(函数()之后){
此.httpBackend.verifyNoOutstandingRequest();
此.httpBackend.verifyNoOutstandingExpection();
});
描述(“成功解析的人员”,函数(){
它(“应该有2个人”,功能(){
getData();
这是.httpBackend.flush();
});
});
});

请先修复所有混乱的变量名。将“persons”重命名为“people”。这是做什么的
var persons=myDataRaw.persons.person?将人员分配给人员集合?这没有任何意义。“persons=myDataRaw.persons.person;”确实会导致收集。您可以在与代码相同的工作示例上检查它。我已经做了两个plunkr的,因为一个是演示和另一个相同的代码,但茉莉花测试。谢谢sza!就这样。