TypeError:' undefined'不是一个功能(评估'时刻()')

时间:2016-03-22 20:41:30

标签: angularjs mocking jasmine momentjs

我在控制器中使用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()方法显然不起作用,它仍然会抛出错误:"无法找到时刻变量"。

1 个答案:

答案 0 :(得分:0)

你能不能自己选择日期吗?

function setDate() {
  controller.date = {
      startDate: new Date('01/01/2016'),
      endDate: new Date('01/02/2016')
  };
}