gpt4 book ai didi

node.js - 单元测试不可用的全局函数(couchapp、mocha)

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:52 25 4
gpt4 key购买 nike

我正在尝试对 CouchDB 设计文档(使用 couchapp.js 编写)进行单元测试,示例:

var ddoc = {
_id: '_design/example',
views: {
example: {
map: function(doc) {
emit(doc.owner.id, contact);
}
}
}
}
module.exports = contacts

然后我可以很容易地将这个文件引入 mocha 测试。

问题是 CouchDB 公开了一些映射函数使用的全局函数(上面的“emit”函数),这些函数在 CouchDB 之外(即在这些单元测试中)不可用。

我试图在每个测试中声明一个全局函数,例如:

var ddoc = require('../example.js')

describe('views', function() {
describe('example', function() {
it('should return the id and same doc', function() {
var doc = {
owner: {
id: 'a123456789'
}
}

// Globally-scoped mocks of unavailable couchdb 'emit' function
emit = function(id, doc) {
assert.equal(contact.owner.id, id);
assert.equal(contact, doc);
}
ddoc.views.example.map(doc);
})
})
})

但 Mocha 因全局泄密投诉而失败。

所有这些一起开始“闻起来不对”,所以想知道是否有更好/更简单的方法通过任何库,即使是在 Mocha 之外?

基本上,我想让每个测试都可以使用模拟实现,我可以从中调用断言。

有什么想法吗?

最佳答案

我会使用 sinon 对测试进行 stub 和监视。 http://sinonjs.org/https://github.com/domenic/sinon-chai

全局变量很好,不受欢迎但很难消除。我现在正在做一些与 jQuery 相关的测试,并且必须在我的 mocha 命令行末尾使用 --globals window,document,navigator,jQuery,$ 所以...是的。

您没有测试 CouchDb 的发出,因此您应该 stub ,因为 a) 您假设它有效并且 b) 您知道它将返回什么

global.emit = sinon.stub().returns(42);
// run your tests etc
// assert that the emit was called

sinon 文档的这一部分可能会有帮助:

it("makes a GET request for todo items", function () {
sinon.stub(jQuery, "ajax");
getTodos(42, sinon.spy());

assert(jQuery.ajax.calledWithMatch({ url: "/todo/42/items" }));
});

希望对您有所帮助。

关于node.js - 单元测试不可用的全局函数(couchapp、mocha),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com