这是我之前question的后续内容。
假设我正在编写带有calculate.js
函数的calculate
源文件,以便在我的客户端代码中使用它
function calculate(num) { return num * 2; }
现在我想测试一下。
我正在使用此article和导出 nodeunit
函数中所述的calculate
(以便测试可以调用它)。
function calculate(num) { return num * 2; } exports.calculate = calculate // node.js stuff. won't run in a browser!
nodeunit
测试运行正常但我不再使用calculate.js
我的网络应用程序,因为它使用exports
。
现在它看起来像一个捕获。我可以解决这个问题吗?
答案 0 :(得分:3)
使用非节点js测试框架,如jasminebdd或jstestdriver
答案 1 :(得分:2)
如果您希望为测试套件使用commonjs格式(使用 导出),由你来定义commonjs工具 浏览器。有许多替代品,它很重要 使用现有代码,这就是当前nodeunit不能使用的原因 开箱即用。
我认为你应该看看browserify来实现这个目标。
使用服务器端构建在浏览器中使节点样式的require()工作 一步,好像通过魔法!
Mocha是一个简单,灵活,有趣的node.js JavaScript测试框架 和浏览器。
我认为你应该看一下我非常喜欢的TJ(明确作者)创建的Mocha(比我过去使用的nodeunit更好)。使用mocha,您可以轻松地进行代码覆盖,观看模式,通知以及更好的Mocha维护。
答案 2 :(得分:2)
Karma runner有nodeunit adapter在浏览器和Phantom JS中运行nodeunit测试。下面是一个示例test entrypoint和Gruntfile使用browserify来运行用CommonJS modules(导出)编写的测试。
答案 3 :(得分:2)
nodeunit-browser-tap + Testling是另一种选择。
答案 4 :(得分:0)
您实际上可以在nodeunit本身内测试隔离的jquery逻辑。例如,这是我为datepicker libary写的一些测试
/*jshint evil:true */
/*global module, require, DatePair */
var fs = require('fs');
// Some of the plugins use jQuery var instead of $
var jQuery = require('jquery');
var $ = jQuery;
// Recreate window and document
var window = { jQuery: jQuery };
var document = window;
// 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();
}
}
在此处查看完整代码+库https://github.com/keithhackbarth/jquery-datetime-picker