gpt4 book ai didi

javascript - 快速单元测试,在服务器上调用 close 结果为 `call of undefined`

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

我正在尝试测试基于express的node.js应用程序。我想返回一个简单的 404.html,我可以成功做到这一点,但之后,在 Node http 服务器上调用 close 会收到此错误:

Fatal error: Cannot call method 'call' of undefined

我很难追踪未定义的内容,因为相同的方法在其他地方调用时效果很好。

这是我的快速代码:

function Server() {
this.port = 9000;
this.staticDir = '/public';
}

function handleHomeRequest(req, res) {
var body = '<html><body>Home Page.</body></html>';
res.send(body);
}

Server.prototype.start = function () {
expServer = express();

expServer.get('/', function (req, res) { handleHomeRequest(req, res); });
expServer.use(function (req, res) {
res.status(404).sendfile('./src/public/404.html');
});

runningServer = expServer.listen(this.port);
};

Server.prototype.stop = function (cb) {
runningServer.close(cb);
};

这是我的nodeunit测试代码:

var ROOT_URL = 'http://localhost',
PORT = 9000,
URL = ROOT_URL + ':' + PORT + '/',
http = require('http'),
Server = require('./server.js'),
server;

exports.setUp = function(done) {
server = new Server();
done();
};

exports.tearDown = function (done) {
server = null;
done();
};

exports['Requesting a page that does not exist results in a 404.'] = function (test) {
server.start();
httpGet(URL + 'guaranteedNotToExistPage', function(res, data) {
test.equal(404, res.statusCode, 'Requesting a page that dne did not return with a status code of 404.');
test.ok(data.indexOf('404 Page Not Found') > -1, 'The 404 page was not returned.');
//test.done();
server.stop(test.done);
});
};

function httpGet(url, callback) {
var request = http.get(url),
receivedData = '';
request.on('response', function (response) {
response.setEncoding('utf8');
response.on('data', function (chunk) {
receivedData += chunk;
});
response.on('end', function () {
callback(response, receivedData);
});
});
}

http get 请求的结果返回,仅当我调用 server.stop(test.done); 时才会发生失败;但是,需要停止服务器以确保我的单元测试可以按任何顺序独立运行。

最佳答案

首先,runningServer 是在哪里定义的?我看不到

var runningServer;

第一段代码中的任何地方。因此,如果您在prototype.start中写入一个值,我怀疑您是否可以在prototype.stop上访问它,这是一个不同的范围。

其次, Node 0.6中的{expressListener}.close()只是同步的,他们在0.8上添加了回调。因此,请检查 node.js 版本以确保正确处理 {cb}。

关于javascript - 快速单元测试,在服务器上调用 close 结果为 `call of undefined`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951780/

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