gpt4 book ai didi

node.js - 在使用 jasmine 需要它后如何将其删除?

转载 作者:太空宇宙 更新时间:2023-11-03 22:02:58 24 4
gpt4 key购买 nike

当我想到我已经在该文件的顶部包含了express时,我正在尝试测试下面的代码。你能知道如何在加载 Express 对象后对其进行猴子修补吗?

var express = require('express')

Helper = (function() {

var HelperObject = function(params) {
this.directories = params.directories;
};

HelperObject.prototype.addStaticPath = function(app) {
for(i = 0; i < this.directories.length; i++) {
var static = express.static('/public');
app.use(static);
}
};

return HelperObject;
})();

最佳答案

问题是,当您创建 Node 模块时,所需的模块会绑定(bind)在模块的闭包中,并且您无法开始监视它,因为它在测试中不可见。

Gently您可以在其中重写 require,但它会在您的代码中添加样板测试相关代码。

来自文档:

Returns a new require functions that catches a reference to allrequired modules into gently.hijacked.

To use this function, include a line like this in your 'my-module.js'.

if (global.GENTLY) require = GENTLY.hijack(require);

var sys = require('sys');
exports.hello = function() {
sys.log('world');
};

Now you can write a test for the module above:

var gently = global.GENTLY = new (require('gently'))
, myModule = require('./my-module');

gently.expect(gently.hijacked.sys, 'log', function(str) {
assert.equal(str, 'world');
});

myModule.hello();

关于node.js - 在使用 jasmine 需要它后如何将其删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344896/

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