模拟HTTP响应以测试node.js HTTP客户端
如何模拟HTTP响应以测试应用程序?模拟HTTP响应以测试node.js HTTP客户端
谢谢!
编辑:我知道有一个虚假的HTTP响应的开源应用程序。我不记得它是ruby还是node.js,但这是我想知道的。对困惑感到抱歉。
EDIT2:https://github.com/chrisk/fakeweb
EDIT3:我想要做的是模拟HTTP响应测试HTTP的node.js客户端。有什么我可以使用像fakeweb,但为node.js?由于
为什么不使用的node.js服务器?他们写作并不重要,可以完全控制回应。
下面是一个例子,直接从http://nodejs.org/
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
这里有描述的各种工具和机制:
http://wiki.apache.org/httpd/WatchingHttpHeaders
其实,这页是主要集中在观看正在进行的HTTP会话。我建议尝试netcat或cadaver生成您自己的自定义请求。
的netcat使用的简单的例子:
$ printf "GET\n\n" |nc localhost 80
<html><body><h1>It works!</h1></body></html>
编辑 卫生署!我刚刚意识到你想模拟的回应而不是请求,对不起。不过,Netcat对此仍然有用。设置它来监听并完全控制其输出。
对于Ruby,如果你想使用rails以外的地方,你可以看一下rails中包含的功能测试的代码,例如,它允许围绕test :: unit用一个很好的包装来访问http方法。对于node.js或ruby,您都可以使用cucumber来测试工作流程并让webdriver访问这些页面。黄瓜与您选择的网络驱动程序(webrat,selenium,celerity,waiter等)一起工作,并可以访问HTTP请求,响应和头文件。
快报通过扩展断言模块提供本:
assert.response(server, {
url: '/',
method: 'GET'
},{
body: '{"name":"tj"}',
status: 200,
headers: {
'Content-Type': 'application/json; charset=utf8',
'X-Foo': 'bar'
}
});
这适用于内置的node.js HTTP服务器。它的优点是不需要监听服务器。缺点是可能需要您使用其他expresso测试框架。
如果我深知你可以使用诺克(https://github.com/pgte/nock)嘲笑从给定路线假的HTTP响应的问题。
,如果你使用的断言should.js(https://github.com/visionmedia/should.js/),请求请求(笑)一个例子可能是这样的:
should = require 'should'
nock = require 'nock'
request = require 'request'
require '../../app.coffee'
// just a mock obj to reply
mockObj =
id: 42
mockRoute = nock 'http://www.mock.com.br'
.get '/path/you/want/to/mock'
.reply 200, mockObj
describe "Mock API", ->
describe "Mock route", ->
it "should return 200 OK and mockObj.id 42", (done) ->
// Arranges test URL
testUrl = "http://www.testurl.com.br:3000/path/you/want/to/test"
expectedObj =
id: 42
request.get testUrl, (error, response, body) ->
// compares expected response's statusCode with received
response.should.have.status 200
expected.should.eql JSON.parse(body)
这只是差一个例子,一位用于生产测试,但我认为这是一个很好的例子,展示它如何工作。
但在这种情况下,就像我测试如果我的端口3000上运行的是能够处理testUrl的请求并将请求转换为模拟的路由,这是我想要达到的外面的东西并确保当我调用testUrl时节点正在获取它。
希望它有帮助。
编辑:代码是在coffeescript(万一有人不知道它)。如果你愿意,可以在JS中使用 - >https://gist.github.com/marcoagner/9501662
编辑2:甚至没有看日期..睡觉:P对不起。只是让它在这里,以防止有人在那里。哈哈哈
请稍微具体一点。如果没有一些解释,标记ruby和node.js并不是真的有用。 – 2011-01-21 13:40:23