我在应用程序中使用 moment.js 来处理日期/时间,但它似乎与 Jasmine 的模拟功能配合得不好。我在下面整理了一个测试套件来显示我的问题:
jasmine.clock().mockDate
似乎暂时不起作用,但它可以很好地工作Date
.
describe('Jasmine tests', function () {
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
// Pass
it('uses the mocked time with Date', function() {
var today = new Date('2015-10-19');
jasmine.clock().mockDate(today);
expect(new Date().valueOf()).toEqual(today.valueOf());
});
// Fail
it('uses the mocked time with moment', function() {
var today = moment('2015-10-19');
jasmine.clock().mockDate(today);
expect(moment().valueOf()).toEqual(today.valueOf());
});
});
为什么Date
按预期工作,同时moment
才不是?不是moment
using Date
在引擎盖下?
正确的嘲笑方式是什么moment
使用茉莉花?
jasmine.clock().mockDate
期望Date
作为输入。Date
and moment
不完全兼容。如果您在规范本身中提供要模拟的日期,您可以简单地使用Date
那里代替。
如果您的代码生成了您想要模拟的 moment,或者您更愿意使用 moment API,请查看moment.toDate() http://momentjs.com/docs/#/displaying/as-javascript-date/。该方法返回Date
对象支持一下。
it('uses the mocked time with moment', function() {
var today = moment('2015-10-19').toDate();
jasmine.clock().mockDate(today);
expect(moment().valueOf()).toEqual(today.valueOf());
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)