我已经在Javascript中使用Date()编写了自己的实现,BardyDate除了Date的所有属性/方法外还有其他一些东西。为什么我这样做确实是一个非常好的问题,但这是一个漫长的故事,我将在下雨天保存它。Javascript日期测试工具
但我在想可能会是能够验证它仍然行为正确的日期。我对测试套件等一无所知,但想知道如何将Javascript日期对象的任何现有测试应用到我的BardyDate以显示正确性?
任何建议非常欢迎。
我已经在Javascript中使用Date()编写了自己的实现,BardyDate除了Date的所有属性/方法外还有其他一些东西。为什么我这样做确实是一个非常好的问题,但这是一个漫长的故事,我将在下雨天保存它。Javascript日期测试工具
但我在想可能会是能够验证它仍然行为正确的日期。我对测试套件等一无所知,但想知道如何将Javascript日期对象的任何现有测试应用到我的BardyDate以显示正确性?
任何建议非常欢迎。
我等待回应,因为我不确定没有日期测试套件已经在那里的JavaScript。我想给任何可能知道更多的人带来怀疑。
但是,据我所知,这种测试将全部在浏览器构建/验证中完成。当然可以使用该开发领域的一些现有测试套件,但我认为这不是一件容易的任务。许多浏览器都有一个build process that you could fork(特别是你可以隔离他们的日期测试用例)。在他们的测试过程中,你将不得不为Javascript日期对象找到给定的段,这将测试以确保w3规范的兼容性。
那么,Selenium是创建单元测试的非常常用和实用的方法,并且如果设计良好的web应用程序集成测试(也可以连接到javascript)并且能够生成有关测试结果的良好报告。
最后,累积性职位上的JavaScript测试库可以在this post about Javascript TDD (Test Driven Design)
找到或者你可以做类似下面的(意味着是一个指引不是一个完整的解决方案 - 从dandavis评论启发):
var epochTS = 0;
var bd = new BardyDate(epochTS);
var d = new Date(epochTS);
Object.getOwnPropertyNames(Date.prototype).forEach(function(dateFunction){
//in this if statement you are testing the functions like getTime() and getYear()
if(dateFunction.indexOf("get") == 0){
console.log("dateFunction " + dateFunction +
"() pass: " + (bd[dateFunction]() === d[dateFunction]()))
}
//in this if statement you are testing the functions like toString() and toJSON()
if(dateFunction.indexOf("to") == 0){
console.log("dateFunction " + dateFunction +
"() pass: " + (bd[dateFunction]() === d[dateFunction]()))
}
//then there are the 16 set methods, those you probably would want to hardcode.
//unless you are content with passing a hard coded value in like "10" -- the
//issue would be bounds testing, which you would likely want to hardcode.
//beyond the scope of this for-each loop.
})
在上面的代码做一点解释
随着Object.getOwnPropertNames(Date.prototype)
您可以获取012所有方法,尽管Date
有财产DontEnum(see this post for more info)。
你也可以将每个函数的字符串作为JavaScript对象中的一个关键,因此这要是dateFunction === "toString"
会被解释/编译成d[toString]()
这相当于d.toString()
的
d[dateFunction]()
重复日期的方法,和呼叫与日期相同的方法,看到它们产生相同的输出。您将需要比较日期的字符串版本,因为2个对象永远不会相等。 – dandavis 2014-12-06 23:38:54