Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模拟HTTP响应以测试node.js HTTP客户端_Http_Node.js - Fatal编程技术网

模拟HTTP响应以测试node.js HTTP客户端

模拟HTTP响应以测试node.js HTTP客户端,http,node.js,Http,Node.js,如何模拟HTTP响应来测试应用程序 我想做的是模拟HTTP响应来测试HTTP node.js客户端。除了node.js之外,还有什么我可以使用的吗?这里介绍了各种工具和机制: 实际上,该页面主要关注正在进行的http对话。我建议您要么尝试生成自定义请求,要么尝试生成自定义请求 netcat使用的简短示例: $ printf "GET\n\n" |nc localhost 80 <html><body><h1>It works!</h1></

如何模拟HTTP响应来测试应用程序


我想做的是模拟HTTP响应来测试HTTP node.js客户端。除了node.js之外,还有什么我可以使用的吗?

这里介绍了各种工具和机制:

实际上,该页面主要关注正在进行的http对话。我建议您要么尝试生成自定义请求,要么尝试生成自定义请求

netcat使用的简短示例:

$ printf "GET\n\n" |nc localhost 80
<html><body><h1>It works!</h1></body></html>
$printf“GET\n\n”| nc localhost 80
它起作用了!
编辑
啊!我刚意识到你想要模拟回应而不是请求,对不起。不过,Netcat在这方面仍然很有用。将其设置为侦听,您就可以完全控制其输出。

对于Ruby,如果您想在rails之外使用,您可以查看rails附带的功能测试代码作为示例,它允许围绕test::unit使用一组很好的包装器来访问http方法。对于node.js或ruby,您可以使用cucumber来测试工作流,并让webdriver访问页面。Cucumber与您选择的web驱动程序(webrat、selenium、Cellerity、Water等)一起工作,并且可以访问HTTP请求、响应和头


为什么不使用node.js服务器?它们编写起来很简单,可以让您完全控制响应

下面是一个例子,直接从


Expresso通过扩展assert模块提供了这一功能:

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测试框架的其余部分


我自己没有尝试过,但我发现有一个模块说它就是这样做的:

我们以前使用的是定制的HTTP虚拟服务器,但最近切换到这个:


如果我很理解这个问题,您可以使用nock()模拟来自给定路由的虚假HTTP响应

例如,如果使用should.js()进行断言,请求请求(lol)可以是这样的:

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上的my是否能够处理testUrl请求,并将请求转换为模拟路由,这是我想要到达的外部路径,并确保在调用testUrl时节点得到了它

希望能有帮助

编辑:代码在coffeescript中(以防有人不知道)。如果您愿意,请使用JS的要点->


Edit2:甚至没有查找日期。。我要睡觉了:对不起。我会把它放在这里,以防它对外面的人有帮助。哈哈哈

请具体一点。如果没有一些解释,标记ruby和node.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)