我正在尝试创建一个单元测试来检查 GET 请求是否返回正确数量的项目,但我正在使用模拟数据来执行此操作。
我的测试如下所示:
测试.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 个似乎为空的对象。也许这就是问题所在?