AngularJS - 在使用 moment.js 的 Controller 上进行单元测试

标签 angularjs unit-testing jasmine momentjs

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

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

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');
};

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

提前致谢!

最佳答案

您不应将 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 改变原始值。

关于AngularJS - 在使用 moment.js 的 Controller 上进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30032032/

相关文章:

angularjs - 在 Jasmine 测试中,promise 的finally 子句永远不会被执行

javascript - 如何在 Angularjs 中获取选中的复选框值?

android - 从非 Android 环境访问 SQLite 数据库

unit-testing - 为什么$provide只能在 'angular.mock.module'函数中使用,$q只能在 'angular.mock.inject'函数中使用?

unit-testing - 有什么工具可以记录单元测试的Java对象吗?

python - Django 1.11 : What fails `pickle` in my parallel test run?

unit-testing - 使用Resharper和Phantom JS调试 Jasmine 测试

javascript - angular-dc 条形图未呈现

javascript - 选择格式为 2 位数字的整数值

javascript - 在 angularjs 中显示/隐藏模板 URL