Я устанавливаю значение даты с помощью actions.js в своем контроллере. Я получаю следующую ошибку при запуске попытки запустить спецификацию против нее:
TypeError: "undefined" не является функцией (оценка "moment()")
Я не забочусь о том, чтобы проверить правильность установки значения, просто хочу, чтобы значение даты было определено для разрешения теста. Какой лучший способ издеваться над этим? Я попытался использовать jasmine.clock(), как было предложено в связанных вопросах, но тест все еще пытается оценить момент(). В идеале я мог бы просто установить 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() таким образом, по-видимому, не работает, он все еще бросает ошибку: "не удается найти переменную момента".
Можете ли вы не просто выбрать даты, чтобы использовать себя?
function setDate() {
controller.date = {
startDate: new Date('01/01/2016'),
endDate: new Date('01/02/2016')
};
}
Date
объектыmoment
- это две разные вещи. Почему вы пытаетесь использовать объектыDate
в одном экземпляре и объектыmoment
в другом?