我在控制器中使用moments.js设置日期值。在运行尝试运行规范时,我遇到以下错误:
TypeError:' undefined'不是一个功能(评估' moment()')
我不关心测试值是否设置正确,我只想定义日期值以允许测试继续进行。嘲笑这个的最好方法是什么?我已尝试使用相关问题中建议的jasmine.clock(),但测试仍在尝试评估moment()。理想情况下,我可以在每次测试之前将controller.date设置为某个任意值以进行测试。
这是我控制器中的代码(在控制器初始化时调用设置日期):
function setDate() {
controller.date = {
startDate: moment().subtract(1, "days").hour(0).minute(0).second(0),
endDate: moment()
};
}
编辑:
以下是相关的控制器代码:
.controller('OrderListCtrl', function ($rootScope, $state, $stateParams, $uibModal, $q, orders, Orders, Product, Store, Payments, params) {
var controller = this;
// set default values for datepicker - beginning of yesterday until current time today
controller.setDate = function() {
controller.date = {
startDate: moment().subtract(1, "days").hour(0).minute(0).second(0),
endDate: moment()
};
}
controller.setDate();
});
以下是相关规范代码:
describe("OrderController", function() {
var orderController, deferred, params, scope, state, stateParams, uibModal, q, controller, moment;
beforeEach(inject(function ($controller, $rootScope, $q, $uibModal) {
scope = $rootScope.$new();
q = $q;
controller = $controller;
uibModal = $uibModal;
deferred = $q.defer();
orderController = controller('OrderListCtrl', {
$rootScope: scope,
$state: state,
$stateParams: stateParams,
$uibModal: uibModal,
$q: q
});
orderController.setDate = function() {
orderController.date = {
startDate: new Date('01/01/2016'),
endDate: new Date('01/02/2016')
}
}
}));
尝试以这种方式覆盖setDate()方法显然不起作用,它仍然会抛出错误:"无法找到时刻变量"。
答案 0 :(得分:0)
你能不能自己选择日期吗?
function setDate() {
controller.date = {
startDate: new Date('01/01/2016'),
endDate: new Date('01/02/2016')
};
}