Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Javascript 使用Mocha和Superagent在bare Node.js应用程序中测试帖子_Javascript_Node.js_Post_Mocha.js_Superagent - Fatal编程技术网

Javascript 使用Mocha和Superagent在bare Node.js应用程序中测试帖子

Javascript 使用Mocha和Superagent在bare Node.js应用程序中测试帖子,javascript,node.js,post,mocha.js,superagent,Javascript,Node.js,Post,Mocha.js,Superagent,我希望这一天你一切都好 因此,我试图在Node中构建一些TDD切块,为此,我构建了一个超级裸体应用程序,它运行一个简单的GET和POST请求。它所做的只是提供世界上最简单的表单,然后将用户输入的内容输入到该表单中,并将其显示在屏幕上。这是virgin节点,不涉及任何框架。我正在使用摩卡咖啡和Superagent进行测试,但我在测试后遇到了问题。这是我的应用程序: var http = require('http'); var qs = require('querystring')

我希望这一天你一切都好

因此,我试图在Node中构建一些TDD切块,为此,我构建了一个超级裸体应用程序,它运行一个简单的GET和POST请求。它所做的只是提供世界上最简单的表单,然后将用户输入的内容输入到该表单中,并将其显示在屏幕上。这是virgin节点,不涉及任何框架。我正在使用摩卡咖啡和Superagent进行测试,但我在测试后遇到了问题。这是我的应用程序:

    var http = require('http');
    var qs = require('querystring');

    var server = http.createServer(function(req, res){
        switch(req.method){
            case 'GET':
                console.log("Calling get");
                res.statusCode = 200;
                res.setHeader('Content-Type', 'text/html');
                res.end("<p>Hello World!</p>" + 
                    "<form method='post' action='/'>" +
                    "<input type='text' name='field'>" + 
                    "<input type='submit'>" +
                    "</form>");
                break;
            case 'POST':
                var body = "";
                req.on('data', function(data){
                    body += data;
                })
                req.on('end', function(){
                    var post = qs.parse(body);
                    res.statusCode = 200;
                    res.setHeader('Content-Type', 'text/html');
                    res.end("<p>" + post.field + "</p>")
                    // console.log(req)
                    console.log(post);
                });
        }
    })
    server.listen(8080);

    console.log('Server running on port 8080.')
我喜欢在学习的时候尽可能地简单,这样我就可以把我正在做的事情孤立起来。据我所知,Superagent.send()方法应该获取一个包含各种post键和值的对象,然后将其传递给应用程序并沿着给定的路径运行。但是,当我运行测试时,除了expect(res.text).to.contain(“test”)断言之外,所有内容都通过了。我得到了一个错误,摩卡希望'未定义'/p>'包含'Test'。当我启动应用程序并在浏览器中运行时,一切都很好


我已经和它搏斗了一段时间,现在我要去蜂巢思维。正如我提到的,我是一个TDD新手,但我想成为一个测试之神,这真的是让我的成熟变得苛刻。任何启示都将不胜感激。

并由我自己获得。当你长时间盯着文档看的时候,它能教你什么,真是太神奇了

查看此处的文档后:

我意识到,为了让Superagent能够正常发布,我必须在发送信息之前告诉它发布的类型,如下所示:

    it("should display input text from a form.", function(done){
        request.post('localhost:8080')
            .type('form')
            .send({field: "Test string."})
            .end(function(res){
                expect(res).to.exist;
                expect(res.status).to.equal(200);
                expect(res.text).to.contain("Test");
                done();
        })
    });

漂亮的东西。希望其他人会觉得这很有帮助。

Neat。我想知道你是否可以只做
.send('field=Test string')
而不做
。键入('form')
,因为文档中说
json
form
是默认值。我会使用superagent。它使测试简单易读,并且不需要让服务器监听端口。Supertest来自同一个作者,使用superagent。奇怪的是,
end(function(res)
返回null和
end(function(err,res)
返回null
err
和一个正常的
res
@lǝ函数(param1,param2)。这是参数的顺序,与名称无关。因此,当调用回调时,如果没有问题且结果正常,则执行如下操作:回调(null,result);因此,如果您将result param放在第一个param中,则它将为null。希望您能进一步理解。
    it("should display input text from a form.", function(done){
        request.post('localhost:8080')
            .type('form')
            .send({field: "Test string."})
            .end(function(res){
                expect(res).to.exist;
                expect(res.status).to.equal(200);
                expect(res.text).to.contain("Test");
                done();
        })
    });