使用 Mocha 和 Chai 编写测试用例
Writing test cases using Mocha and Chai
我有一个简单的函数:
var moment = require('moment-timezone');
exports.splitIntoDays = function(from,to) {
var timeIntervals = [];
var interval = {};
var start = moment(from);
var end = moment(to);
if(start.isAfter(end)) {
throw new Error('From date ('+from+') is after To date ('+to+').Enter a valid date range.');
}
var initial = start;
console.log("Before loop"+initial.format("YYYY/MM/DD-HH:mm:ss")+" "+initial.diff(end,'hours'));
while(end.diff(initial,'hours') > 24) {
timeIntervals.push({"from" : initial.format("YYYY/MM/DD-HH:mm:ss"), "to" : initial.add(24,'hours').format("YYYY/MM/DD-HH:mm:ss")});
initial = initial.add(1,'hours');
}
timeIntervals.push({"from" : initial.format("YYYY/MM/DD-HH:mm:ss"), "to" : end.format("YYYY/MM/DD-HH:mm:ss")});
console.info(JSON.stringify(timeIntervals));
return timeIntervals;
}
所以,如果我调用它,splitIntoDays('2014/09/13-10:00:00','2014/09/14-09:00:00')
,
我收到以下回复:
[ { from: '2014/09/13-10:00:00', to: '2014/09/14-09:00:00' } ]
我使用 Mocha 和 Chai 编写了以下测试:
var expect = require("chai").expect;
var utils = require("../Utils.js");
describe("Utils", function(){
describe("#splitIntoDays()", function(){
var timeIntervals = [];
var results = utils.splitIntoDays('2014/09/13-10:00:00','2014/09/14-09:00:00');
timeIntervals.push({ "from": '2014/09/13-10:00:00', "to": '2014/09/14-09:00:00' });
expect(results).to.equal(timeIntervals);
});
});
但是,这个失败了。能帮我指出错误吗?
您需要将测试包装在 it
调用中,并且需要使用 deep.equal
。例如:
it("equal", function () {
expect(results).to.deep.equal(timeIntervals);
});
equal
本身将检查对象是否与 ===
严格相等。在您的计算机上启动 Node 并在提示符处键入 [] === []
。您将得到结果 false
。这是因为您有两个 Array
对象,如果对象不是同一实例,则严格的相等性检查将失败。
it
调用是必要的,因为这是您告诉 Mocha "here's a test for you to run" 的方式。 describe
调用声明 测试套件 但他们自己不声明任何测试。
我有一个简单的函数:
var moment = require('moment-timezone');
exports.splitIntoDays = function(from,to) {
var timeIntervals = [];
var interval = {};
var start = moment(from);
var end = moment(to);
if(start.isAfter(end)) {
throw new Error('From date ('+from+') is after To date ('+to+').Enter a valid date range.');
}
var initial = start;
console.log("Before loop"+initial.format("YYYY/MM/DD-HH:mm:ss")+" "+initial.diff(end,'hours'));
while(end.diff(initial,'hours') > 24) {
timeIntervals.push({"from" : initial.format("YYYY/MM/DD-HH:mm:ss"), "to" : initial.add(24,'hours').format("YYYY/MM/DD-HH:mm:ss")});
initial = initial.add(1,'hours');
}
timeIntervals.push({"from" : initial.format("YYYY/MM/DD-HH:mm:ss"), "to" : end.format("YYYY/MM/DD-HH:mm:ss")});
console.info(JSON.stringify(timeIntervals));
return timeIntervals;
}
所以,如果我调用它,splitIntoDays('2014/09/13-10:00:00','2014/09/14-09:00:00')
,
我收到以下回复:
[ { from: '2014/09/13-10:00:00', to: '2014/09/14-09:00:00' } ]
我使用 Mocha 和 Chai 编写了以下测试:
var expect = require("chai").expect;
var utils = require("../Utils.js");
describe("Utils", function(){
describe("#splitIntoDays()", function(){
var timeIntervals = [];
var results = utils.splitIntoDays('2014/09/13-10:00:00','2014/09/14-09:00:00');
timeIntervals.push({ "from": '2014/09/13-10:00:00', "to": '2014/09/14-09:00:00' });
expect(results).to.equal(timeIntervals);
});
});
但是,这个失败了。能帮我指出错误吗?
您需要将测试包装在 it
调用中,并且需要使用 deep.equal
。例如:
it("equal", function () {
expect(results).to.deep.equal(timeIntervals);
});
equal
本身将检查对象是否与 ===
严格相等。在您的计算机上启动 Node 并在提示符处键入 [] === []
。您将得到结果 false
。这是因为您有两个 Array
对象,如果对象不是同一实例,则严格的相等性检查将失败。
it
调用是必要的,因为这是您告诉 Mocha "here's a test for you to run" 的方式。 describe
调用声明 测试套件 但他们自己不声明任何测试。