Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用NodeUnit测试客户端代码_Javascript_Unit Testing_Node.js_Client Side - Fatal编程技术网

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输出

您实际上可以在nodeunit本身中测试独立的jQuery逻辑。例如,以下是我为datepicker库编写的一些测试:

/* 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();
}
}

请在此处查看完整的代码+库:

谢谢。不过,我仍然希望通过
节点运行测试。AFAIR
jstestdriver
是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();
    }
}