首页 文章

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

提问于
浏览
0

我希望那一天能找到你 .

所以我正在尝试在Node中构建一些TDD chops,为此我已经构建了一个运行简单的GET和POST请求的超级骨架应用程序 . 它所做的只是提供世界上最简单的形式,然后将用户输入的内容放入此表单并将其放在屏幕上 . 这是原始节点,不涉及框架 . 我正在使用Mocha和Superagent进行测试,并且在POST测试中遇到困难 . 这是我的应用程序:

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.')

这是我的测试:

var request = require('superagent');
    var expect = require('expect.js');

    describe('Main page', function(){
        it("should get 'Hello World!'", function(done){
            request.get('localhost:8080').end(function(res){
                expect(res).to.exist;
                expect(res.status).to.equal(200);
                expect(res.text).to.contain("World");
                done();
            });
        });

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

我喜欢在学习东西时尽可能简单地保持它,这样我就可以隔离我正在做的事情 . 根据我对Superagent的了解,.send()方法应该包含一个包含各种post键和值的对象,然后将其传递给app并沿给定路径运行 . 但是当我运行测试时,除了expect(res.text).to.contain(“Test”)断言之外,所有内容都会通过 . 我收到摩卡期待的错误'

未定义
' to contain '测试' . 当我刚启动应用程序并在浏览器中运行时,一切都很好 .

我已经和它搏斗了一段时间,现在我要去打击 . 正如我所提到的,我是一名TDD新手,但我想成为一名测试之神,这真的让我感到沮丧 . 任何启蒙都会受到高度赞赏 .

1 回答

  • 2

    并且我自己得到它 . 令人惊讶的是,当你长时间盯着它时,文档可以教什么 .

    看了这里的文档:

    http://visionmedia.github.io/superagent/#post-/%20put%20requests

    我意识到,对于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();
            })
        });
    

    漂亮的东西 . 希望其他人觉得这很有用 .

相关问题