2016-03-07 40 views
0

我有点困惑,为什么我得到undefined作为我正在测试的函数的返回值。karma中的console.log angularjs方法测试

这里是我测试的功能:基于阵列dummyEntityArray我阵列

it("should arrange an array into ovject with extra value for entities + depots", inject(function (shareDataService) { 
     var dummyEntityArray = ["ent1", "ent2", "ent3"]; 
     var expectedObjectArray = [{ val: "ent1", checked: false }, { val: 'ent2', checked: false }, { val: 'ent3', checked: false }]; 

     expect(mainScope.entityItemsIntoObjectChecked).toBeDefined(); 
     mainScope.entityItemsIntoObjectChecked(dummyEntityArray); 
     console.log(mainScope.entityItemsIntoObjectChecked(dummyEntityArray)) 
})) 

我期待线路console.log(mainScope.entityItemsIntoObjectChecked(dummyEntityArray))输出:

$scope.entityItemsIntoObjectChecked = function (entityItems) { 
    newEntityWithChecked = entityItems.map(function (value) { 
     return { "val": value, "checked": false }; 
    }); 
    shareDataService.setEntityArray(newEntityWithChecked); 
} 

和部分我的测试套件我已经通过在线mainScope.entityItemsIntoObjectChecked(dummyEntityArray);

但我在console.log上得到undefined。为什么是这样?

回答

1

您的$scope.entityItemsIntoObjectChecked方法不会返回任何内容,因此返回值将为undefined

您可以从方法返回newEntityWithChecked数组或通过shareDataService.setEntityArray方法返回间谍来验证是否传递了期望的数组。

你可以阅读间谍这里的文档:http://jasmine.github.io/2.0/introduction.html#section-Spies

+0

宾果游戏,欢呼的人。新测试:D – xeon48

+0

是否可以在茉莉花中调用一个函数并为它分配一个变量?例如,我想'mainScope.entityItemsIntoObjectChecked(dummyEntityArray);'被分配给一个var,然后传递到我的下一个测试步骤,即expect(mainScope.methodWhichChangesArrayToObject(mainScope.entityItemsIntoObjectChecked(dummyEntityArray))。toEqual(<<对象在数组中>>)' – xeon48

+0

下一步你的意思是另一个规范吗?通常不建议让一个规范依赖于另一个规范。你可以在你想要测试的规范中调用必要的方法'methodWhichChangesArrayToObject' – Saravana

相关问题