Javascript 如何使用NodeUnit测试客户端代码
这是一项后续行动 假设我正在使用Javascript 如何使用NodeUnit测试客户端代码,javascript,unit-testing,node.js,client-side,Javascript,Unit Testing,Node.js,Client Side,这是一项后续行动 假设我正在使用calculate函数编写calculate.js源文件,以便在客户端代码中使用它: function calculate(num) { return num * 2; } nodeunit测试运行正常,但我不能再在我的web应用程序中使用calculate.js,因为它使用导出 现在它看起来像一个陷阱。我可以解决这个问题吗?使用非Node.js测试框架,如jasminebdd或jstestdriver。 如果您希望在测试套件中使用CommonJS格式(使
calculate
函数编写calculate.js
源文件,以便在客户端代码中使用它:
function calculate(num) {
return num * 2;
}
nodeunit
测试运行正常,但我不能再在我的web应用程序中使用calculate.js
,因为它使用导出
现在它看起来像一个陷阱。我可以解决这个问题吗?使用非Node.js测试框架,如jasminebdd或jstestdriver。 如果您希望在测试套件中使用CommonJS格式(使用 导出),您可以为 浏览器有许多替代方案,它的重要性在于它适合 使用您现有的代码,这就是nodeunit当前不可用的原因 开箱即用 我想你应该看看Browserify来完成这个 使Node.js-style require()在具有服务器端构建的浏览器中工作 一步一步,就像变魔术一样 Mocha是一个简单、灵活、有趣的Node.js JavaScript测试框架 和浏览器 我想你应该看看TJ(Express.js的作者)创造的摩卡咖啡,我非常喜欢它(比我过去使用的nodeunit更好)。有了Mocha,您可以轻松地进行代码覆盖、观看模式、通知等操作,因为Mocha更易于维护。拥有在浏览器和PhantomJS中运行nodeunit测试的功能。下面是一个示例,用于运行(导出)中编写的测试。+是另一个选项,如果您设置为nodeunit
- 获取在本地浏览器中运行的测试的命令行输出
- 如果您在GitHub上托管,则获取免费的跨浏览器CI
- 浏览器点击包装器可以让您获得Testling能够理解的nodeunit输出
/* jshint evil:true */
/* global module, require, DatePair */
var fs = require('fs');
// Some of the plugins use a jQuery variable instead of $
var jQuery = require('jquery');
var $ = jQuery;
// Recreate window and document
var window = { jQuery: jQuery };
var document = window;
// The file is included here:
eval(fs.readFileSync('../lib/js/jquery/plugins/jquery.cookie.js') + '');
eval(fs.readFileSync('../lib/js/jquery.timepicker/jquery.timepicker.js') + '');
eval(fs.readFileSync('../lib/js/bootstrap/bootstrap-datepicker.js') + '');
eval(fs.readFileSync('../homepage/js/datepair.js') + '');
// Initialize DatePair Object
var datePair = DatePair(new Date(), {
dateStart: $('<input type="text" autocomplete="off">'),
dateEnd: $('<input type="text" autocomplete="off">'),
timeStart: $('<input type="text" autocomplete="off">'),
timeEnd: $('<input type="text" autocomplete="off">')
});
module.exports = {
'Time Delta Var Is 1 hour' : function (test) {
test.equal(datePair.getTimeDelta(), 3600);
test.done();
},
'Change Date And Check For 1 Hour Difference' : function (test) {
datePair.startTime.val("10:00pm").change();
test.equal(datePair.endTime.val(), "11:00pm");
test.done();
},
'Make End Date Move Up One Day' : function (test) {
var expectedEndDates = [1];
datePair.startTime.val("11:00pm").change();
expectedEndDates.push(parseInt(datePair.startDate.val().split("/")[1], 10) + 1);
test.ok($.inArray(parseInt(datePair.endDate.val().split("/")[1], 10), expectedEndDates) !== -1);
test.equal(datePair.endTime.val(), "12:00am");
test.done();
},
'Change To 11:30pm Of Previous Day' : function (test) {
// Move startTime 1 Day Forward
datePair.startTime.val("11:00pm").change();
// Move EndDate 1 Day Backwards
datePair.endTime.val("11:30pm").change();
test.equal(datePair.endDate.val(), datePair.startDate.val());
test.done();
}
}
/*jshint邪恶:真*/
/*全局模块,必需,日期对*/
var fs=需要('fs');
//一些插件使用jQuery变量而不是$
var jQuery=require('jQuery');
var$=jQuery;
//重新创建窗口和文档
var窗口={jQuery:jQuery};
var文档=窗口;
//文件包含在此处:
eval(fs.readFileSync('../lib/js/jquery/plugins/jquery.cookie.js')+“”);
eval(fs.readFileSync('../lib/js/jquery.timepicker/jquery.timepicker.js')+“”);
eval(fs.readFileSync('../lib/js/bootstrap/bootstrap-datepicker.js')+“”);
eval(fs.readFileSync('../homepage/js/datepair.js')+“”);
//初始化日期对对象
var datePair=datePair(新日期(){
日期开始:$(''),
dateEnd:$(''),
timeStart:$(''),
时间结束:$('')
});
module.exports={
“时间增量变量为1小时”:函数(测试){
test.equal(datePair.getTimeDelta(),3600);
test.done();
},
“更改日期并检查1小时差异”:功能(测试){
datePair.startTime.val(“10:00pm”).change();
test.equal(datePair.endTime.val(),“11:00pm”);
test.done();
},
“使结束日期上移一天”:函数(测试){
var expectededDates=[1];
datePair.startTime.val(“11:00pm”).change();
expectededDates.push(parseInt(datePair.startDate.val().split(“/”[1],10)+1);
test.ok($.inArray(parseInt(datePair.endDate.val().split(“/”[1],10),expectedddates)!=-1);
test.equal(datePair.endTime.val(),“12:00am”);
test.done();
},
“改为前一天晚上11:30”:功能(测试){
//将开始时间提前1天
datePair.startTime.val(“11:00pm”).change();
//向后移动EndDate 1天
datePair.endTime.val(“11:30pm”).change();
test.equal(datePair.endDate.val(),datePair.startDate.val());
test.done();
}
}
请在此处查看完整的代码+库:谢谢。不过,我仍然希望通过
节点运行测试。AFAIRjstestdriver
是Java,所以我想避免使用它。我可以让node
运行jamsine
吗?阅读一下这个,也许可以将node js加载到node js中,谢谢。也许解决方案只是制作“节点模块包装器”。只是想知道为什么需要通过节点运行它?当它只是一个简单的jsNode看起来像是一个在命令行中运行java脚本的方便工具时。所以我正在考虑将其用于单元测试。也许这是我的错误。我想你可以通过阅读我的答案来完成=>
/* jshint evil:true */
/* global module, require, DatePair */
var fs = require('fs');
// Some of the plugins use a jQuery variable instead of $
var jQuery = require('jquery');
var $ = jQuery;
// Recreate window and document
var window = { jQuery: jQuery };
var document = window;
// The file is included here:
eval(fs.readFileSync('../lib/js/jquery/plugins/jquery.cookie.js') + '');
eval(fs.readFileSync('../lib/js/jquery.timepicker/jquery.timepicker.js') + '');
eval(fs.readFileSync('../lib/js/bootstrap/bootstrap-datepicker.js') + '');
eval(fs.readFileSync('../homepage/js/datepair.js') + '');
// Initialize DatePair Object
var datePair = DatePair(new Date(), {
dateStart: $('<input type="text" autocomplete="off">'),
dateEnd: $('<input type="text" autocomplete="off">'),
timeStart: $('<input type="text" autocomplete="off">'),
timeEnd: $('<input type="text" autocomplete="off">')
});
module.exports = {
'Time Delta Var Is 1 hour' : function (test) {
test.equal(datePair.getTimeDelta(), 3600);
test.done();
},
'Change Date And Check For 1 Hour Difference' : function (test) {
datePair.startTime.val("10:00pm").change();
test.equal(datePair.endTime.val(), "11:00pm");
test.done();
},
'Make End Date Move Up One Day' : function (test) {
var expectedEndDates = [1];
datePair.startTime.val("11:00pm").change();
expectedEndDates.push(parseInt(datePair.startDate.val().split("/")[1], 10) + 1);
test.ok($.inArray(parseInt(datePair.endDate.val().split("/")[1], 10), expectedEndDates) !== -1);
test.equal(datePair.endTime.val(), "12:00am");
test.done();
},
'Change To 11:30pm Of Previous Day' : function (test) {
// Move startTime 1 Day Forward
datePair.startTime.val("11:00pm").change();
// Move EndDate 1 Day Backwards
datePair.endTime.val("11:30pm").change();
test.equal(datePair.endDate.val(), datePair.startDate.val());
test.done();
}
}