TypeError: «undefined» не является функцией (оценивает «moment ()»)

0

Я устанавливаю значение даты с помощью 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() таким образом, по-видимому, не работает, он все еще бросает ошибку: "не удается найти переменную момента".

  • 0
    Объекты Date объекты moment - это две разные вещи. Почему вы пытаетесь использовать объекты Date в одном экземпляре и объекты moment в другом?
  • 0
    Вы пробовали вводить момент в beforeEach (inject ())?
Показать ещё 1 комментарий
Теги:
mocking
momentjs
jasmine

1 ответ

0

Можете ли вы не просто выбрать даты, чтобы использовать себя?

function setDate() {
  controller.date = {
      startDate: new Date('01/01/2016'),
      endDate: new Date('01/02/2016')
  };
}
  • 0
    Когда я пытаюсь использовать это в спецификации, это не поднимается.
  • 0
    О, я неправильно прочитал ваш пост, извините. Так почему бы просто не установить свойство даты в тесте после инициализации контроллера?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню