如何在茉莉花测试中创建一个监视日期的函数
How to create a spy on Date functions in jasmine testing
我有以下函数和规范。我已经创建了spy on date对象,我在我的函数中传递和操作。但是spy不是在rightDate上创建的。你们能帮我解决这个问题吗?
var jasmineFunc = new function(leftDate, rightDate){
var leftDateFormat= leftDate.format("H:mm");
rightDate= new Date(rightDate- 60000);
var rightDateFormat = rightDate.format("H:mm");
}
Spec:
describe("format", function(){
var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0);
var rightDate= new Date(2016, 0, 1, 2, 0, 0, 0);
spyOn(leftDate,"format").and,returnValue("00:00");
spyOn(rightDate, "format").and.returnValue("00:59");
});
你的代码有几个错误。
- 和& &之间有逗号(,);returnValue,它应该是点(.) 在日期对象中没有称为格式的函数,我的chrome当然没有建议任何这样的方法
- 您没有使用it函数,该函数可能类似于java中的@Test(见下面的代码)
- 回答你关于原型的评论,这应该也能工作,请将getHours替换为spy上的format。
然而,我已经嘲笑了一个方法供您参考,它的工作
var jasmineFunc = function(leftDate, rightDate) {
var leftDateFormat = leftDate.format("H:mm");
rightDate = new Date(rightDate - 60000);
var rightDateFormat = rightDate.format("H:mm");
}
Date.prototype.format = function() {
return "This formats the text";
}
describe("format", function() {
it('tempSpec', function() {
var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0);
var rightDate = new Date(2016, 0, 1, 2, 0, 0, 0);
spyOn(leftDate, "getHours").and.returnValue("00:00");
spyOn(rightDate, "getHours").and.returnValue("00:59");
spyOn(leftDate, "format").and.returnValue("I've hijacked it in the spy");
var dt = leftDate.getHours()
var txt = leftDate.format()
expect(dt).toEqual("00:00");
expect(txt).toEqual("I've hijacked it in the spy");
})
});
- 仅供参考这里有一些关于js日期格式的更多信息,它使用
- 也是出于好奇,我可以问你为什么你想测试一个API代码,你应该测试你自己的代码,因为那些API已经过彻底测试
这是一个更新版本的代码,我想我终于明白你的意思对象被改变了,它被重新分配。那么是什么改变了呢?
var jasmineFunc = {
testFunc: function(leftDate, rightDate) {
var leftDateFormat = this.formatFunc(leftDate);
rightDate = new Date(rightDate - 60000);
var rightDateFormat = this.formatFunc(rightDate);
return {'left' : leftDateFormat, 'right' : rightDateFormat}
},
formatFunc: function(value) {
return value.format("H:mm")
}
}
Date.prototype.format = function() {
return "This formats the text";
}
describe("format Spec", function() {
it('tempSpec', function() {
var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0);
var rightDate = new Date(2016, 0, 1, 2, 0, 0, 0);
spyOn(jasmineFunc, "formatFunc").and.returnValue("Some arbitrary Value");
var testObj = jasmineFunc.testFunc(leftDate, rightDate);
expect(testObj.left).toEqual("Some arbitrary Value");
expect(testObj.right).toEqual("Some arbitrary Value");
});
});
- 由于您正在重用变量,所以我将格式委托给另一个函数,这样我就可以根据我的需求模拟它。 注意,我不再需要模拟Date原型,我可以简单模拟中间函数,因此您可以将其重新分配你需要多少次都行。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- 监视由 Jasmine 中的另一个函数调用的函数
- 当我将$scope分配给另一个变量并更改新变量上的监视值时,不会触发角度 $scope.$watch
- 更新一个控制器中的模型,该模型被监视并位于不同的包中,并由另一个控制器使用
- Jasmine,一个测试,多个ajax请求(错误:ajax已经被监视)
- 从指令更新作用域,并使用另一个指令进行监视
- 监视一个方法与西农.方法绑定到事件侦听器.方法已执行,但.calledOnce为false
- 如何在茉莉花测试中创建一个监视日期的函数
- WebStorm IDE文件监视coffeescript创建一个空文件
- 在react中创建一个监视onChange方法
- 找不到一个对象来监视start()
- 如何用Javascript监视节点中的另一个模块
- 如何使用Jasmine监视在另一个方法中创建的对象