【发布时间】:2015-09-19 16:17:45
【问题描述】:
我想集成测试这个 javascript 代理服务器。
var express = require(["express"], function(){}),
http = require(["http"], function(){}),
port = (process.env.PORT || 8001),
server = module.exports = express(),
httpProxy = require(['http-proxy'], function(){});
var proxy = httpProxy.createProxyServer();
// SERVER CONFIGURATION
// ====================
server.configure(function() {
server.use(function(req, res, next) {
if (req.url.indexOf('/any/thing') === 0) {
//console.log(res);
proxy.web(req, res, {target: 'http://any.thing.com'});
} else {
next();
}
});
server.use('/anything', express["static"](__dirname + "/../public"));
server.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
server.use(express.bodyParser());
server.use(server.router);
});
// Start Node.js Server
http.createServer(server).listen(port);
我的想法是使用 SinonJS 创建一个假服务器。 Web 前端向原始代理服务器发送请求。该请求将被转发到假服务器,该服务器发回一个假响应。我想用 Jasmine 编写测试。
我不知道如何设置这一切。我从一个 HTML 文件开始:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec Runner v2.2.0</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.2.0/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine-2.2.0/jasmine.css">
<script src="lib/jasmine-2.2.0/jquery-2.1.4.js"></script>
<script src="lib/jasmine-2.2.0/jasmine.js"></script>
<script src="lib/jasmine-2.2.0/jasmine-html.js"></script>
<script src="lib/jasmine-2.2.0/boot.js"></script>
<script src="lib/jasmine-2.2.0/jasmine-jquery.js"></script>
<script src="lib/jasmine-2.2.0/sinon.js"></script>
<!-- libs -->
<script src="lib/jasmine-2.2.0/require.js"></script>
<script src="src/config.js"></script>
<!-- Server -->
<script src="src/server.js"></script>
<!-- add spec files here -->
</head>
<body>
</body>
</html>
我可以像在<script src="src/server.js"></script> 这一行中那样从这个文件中启动代理服务器吗?
然后我会在规范文件中启动假服务器:
describe("Integration Tests", function(){
var server;
beforeAll(function(){
server = sinon.fakeServer.create();
server.autoRespond = true;
server.respondImmediately = true;
serverResponse([200, {}, '{}']);
});
function serverResponse(response){
server.respondWith(/^https?:any.thing.com/, response);
}
it ("should ...", function(){
expect(...)...
});
});
我可以这样做吗?它对我不起作用,因为服务器无法启动。控制台给出这些错误:
未捕获的引用错误:未定义进程
加载资源失败:服务器响应状态为 404(未找到)
未捕获的错误:脚本错误:express
http://requirejs.org/docs/errors.html#scripterror
加载资源失败:> 服务器响应状态为 404(未找到)
未捕获的错误:脚本错误:http
怎么了?
【问题讨论】:
标签: javascript html node.js server integration-testing