【发布时间】:2015-11-22 19:54:34
【问题描述】:
我正在尝试创建一个单元测试来检查 GET 请求是否返回正确数量的项目,但我正在使用模拟数据来执行此操作。
我的测试如下所示:
test.js
describe('Customer Controller', function () {
var controller;
var customers = mockData.getMockCustomers(); // fake customers (5 customers)
beforeEach(function() {
bard.appModule('app');
bard.inject('$controller', '$q', '$rootScope');
var cs = {
getCustomers: function() {
return $q.when(customers);
}
};
controller = $controller('customersCtrl', {
CustomerService: cs
});
});
it('should return 5 customers', function() {
$rootScope.$apply();
expect(controller.customers).to.have.length(5);
});
});
我在运行测试时不断收到此错误:
TypeError: 无法读取未定义的属性“长度”
看起来controller.customers 出于某种原因以undefined 的身份回归。我是否正确地模拟了数据?
我对此很陌生,无法弄清楚我做错了什么。我什至不知道如何调试这样的问题。
感谢任何帮助。提前致谢!
更新
我的控制器如下所示:
function customersCtrl(dataservice) {
var vm = this;
vm.customers = [];
fetchCustomers();
function fetchCustomers() {
return dataservice.getCustomers()
.then(function(data) {
vm.customers = data.data;
return vm.customers ;
});
}
}
更新 2
我在测试中放置了一个 console.log,我的 customers 变量返回了 5 个似乎为空的对象。也许这就是问题所在?
【问题讨论】:
-
只是出于兴趣,您是否更改了控制器的名称,或者您可能有复制和粘贴错误,您初始化 'scoreListCtrl' 而不是 'customersCtrl'
-
是的,我已更改名称以发布此示例。
标签: angularjs unit-testing karma-runner karma-mocha