【发布时间】:2014-12-29 13:04:21
【问题描述】:
Mocha 中有没有办法测试一个函数是否调用了特定的方法或外部函数?
我正在使用 Mocha 和 Chai,但我对任何其他断言库持开放态度。
好的,因此使用 sinon 测试是否正在调用方法非常容易。我不确定是否要测试是否正在调用外部函数。所以我更新了这些例子来代表一些更“真实世界”的东西。我正在开发一个节点应用程序,所以foo.js 和bar.js 都是模块。
示例:
foo.js
var bar = require('bar');
var xyz = function () {};
var Foo = module.exports = function () {
this.bar();
bar();
xyz();
};
Foo.prototype.bar = function () {};
bar.js
var bar = module.exports = function () {};
fooSpec.js
var chai = require('chai');
var sinon = require('sinon');
var sinonChai = require('sinonChai');
var expect = chai.expect;
var Foo = require('../lib/foo');
chai.use('sinonChai');
describe('Foo', function () {
var method;
beforeEach(function (done) {
method = sinon.spy(Foo.prototype, 'bar');
done();
});
afterEach(function (done) {
method.restore();
done();
});
it('should call Foo.prototype.bar() immediately', function () {
new Foo();
expect(method).to.have.been.called;
});
it('should call the module bar immediately', function () {
// ????????????
});
it('should call xyz() immediately', function () {
// ????????????
});
});
如您所见,我已经知道如何测试Foo.prototype.bar,但我找不到实现第二个和第三个测试的方法。
【问题讨论】:
-
如果您的 sn-ps 旨在成为模块,那么说明您从模块中导出的含义会很有帮助,因为这对您将获得的答案类型很重要。
-
我更详细地更新了示例。示例文件是节点应用程序中的模块。
标签: javascript node.js tdd mocha.js chai