无法使用supertest和mocha提交表单

时间:2015-02-06 22:31:57

标签: mocha supertest

我使用supertest和mocha来测试nodejs应用程序。用户可以做的一件事就是提交一个非常简单的表单,该表单由节点服务器选取并使用强大的功能进行解析。

这是mocha测试代码:

var should = require('should'),
    express = require('express'),
    app = require('../app.js'),
    request = require('supertest'),
    csrfToken,
    sessionId,
    cookies = [];
describe('Post Handler', function(){
  it('Uploads new post', function(done){
    var req = request(app).post('/post?_csrf=' + csrfToken);
    req.cookies = cookies;
    req
      .type('form')
      .send({fieldTitle: 'autopost'})
      .send({fieldContent: 'autocontent'})
      .send({contentType: 'image/png'})
      .send({blobId: 'icon_23943.png'})
      .expect(200)
      .end(function(error, res){
        console.log('here');
        done();
      });
  });

csrfToken 从服务器检索csrf令牌,因为我使用的是csurf模块,每个POST方法都需要一个csrf令牌。 cookies 存储节点服务器提供的会话cookie,以便我可以在请求之间保持会话。

表单由以下代码处理:

//Takes HTTP form posted by client and creates a new post in the Db
exports.postPostUpload = function (req, res) {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
                console.log(err);
        if (err) res.redirect(303, '/error');
        else {
            var new_post = new post_model.Post().createNewPost(fields);
            new_post.setUserId(req.session.passport.user.userId);
            new_post.uploadPostToDb(function (error, result) {
                if (error) return res.status(500).end();
                else {
                    if (new_post.media.contentType.indexOf('video') !== -1) {
                        addMessageToEncodingQueue(new_post, function (error, result, response) {
                            if (error) {
                                errorHelper.reportError({
                                    stack: new Error().stack,
                                    error: error
                                });
                                res.status(500).end();
                            }
                            else res.status(200).send(new_post.cuid);
                        });
                    }
                    else return res.status(200).send(new_post.cuid);
                }
            });
        }
    });
}

我当前的问题是,一旦表单处理程序执行行 form.parse(req,function(错误,字段,文件){,就没有任何反应.Tormidable不会返回错误,它只是因此,mocha测试从未收到服务器的回复,最终套接字挂起并且测试崩溃。不用说,如果你通过网站手动完成表单,表单就会成功提交。

supertest / mocha执行此测试的方式必定存在错误,但我无法找到它。任何指针都非常受欢迎。

0 个答案:

没有答案