AngularJS - 对使用 moment.js 的控制器进行单元测试

AngularJS - Unit tests on Controller that uses moment.js

我正在尝试对使用 moment.js 处理一周三个日期的控制器进行单元测试。我的测试框架是 jasmine,我的 AngularJS 版本是 v1.3.15

基本上我有一个 init() 函数来设置它们,我想检查它们是否都在控制器中正确设置。

var myController = this;

myController.init = function () {
    myController.currentDate = moment().format('DD-MM-YYYY');
    myController.startOfWeek = moment(currentDate).startOf('week').format('DD-MM-YYYY');
    myController.endOfWeek = moment(currentDate).endOf('week').format('DD-MM-YYYY');
};

此时我不确定这种方法是否正确and/or我是否应该在这里测试这些东西。

提前致谢!

您不应该将 currentDate 传回时刻创建函数。这样做将调用解析,将回退到浏览器的实现(给你一个弃用警告),如果浏览器的区域设置与你格式化的区域设置不同,将会失败。

要么每次都调用 moment():

myController.currentDate = moment().format('DD-MM-YYYY');
myController.startOfWeek = moment().startOf('week').format('DD-MM-YYYY');
myController.endOfWeek = moment().endOf('week').format('DD-MM-YYYY');

或者,如果您愿意,您可以只捕获一次当前时间,然后为每个函数复制那个时刻。

var now = moment();
myController.currentDate = now.format('DD-MM-YYYY');
myController.startOfWeek = moment(now).startOf('week').format('DD-MM-YYYY');
myController.endOfWeek = moment(now).endOf('week').format('DD-MM-YYYY');

将时刻传递给时刻创建函数将克隆它,防止 startOfendOf 改变原始值。