Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/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
Javascript 节点中的Supertest自定义express服务器_Javascript_Unit Testing_Node.js_Mocha.js - Fatal编程技术网

Javascript 节点中的Supertest自定义express服务器

Javascript 节点中的Supertest自定义express服务器,javascript,unit-testing,node.js,mocha.js,Javascript,Unit Testing,Node.js,Mocha.js,请对我温柔一点。我是异步编码的新手,并且已经被投入到一个使用node开发和API服务器的密集型项目中。我很喜欢,但有些事情不是自然而然的 我们的项目是使用expressjs构建的。我们有一个文件server.js,在其中我们实例化了一个express服务器,而express服务器又实例化了我们的路由器等等。我需要集成测试这个现在(部分)完整的服务器。通常我所做的是从命令行运行“%node server.js”,然后使用python请求或curl发出请求并检查响应 现在我的任务是编写一个单元和集成

请对我温柔一点。我是异步编码的新手,并且已经被投入到一个使用node开发和API服务器的密集型项目中。我很喜欢,但有些事情不是自然而然的

我们的项目是使用expressjs构建的。我们有一个文件server.js,在其中我们实例化了一个express服务器,而express服务器又实例化了我们的路由器等等。我需要集成测试这个现在(部分)完整的服务器。通常我所做的是从命令行运行“%node server.js”,然后使用python请求或curl发出请求并检查响应

现在我的任务是编写一个单元和集成测试套件,这样我们就可以自动化测试了。我一直在使用mocha,现在正在尝试使用supertest进行集成测试。问题是supertest需要一个服务器对象,然后它将测试应用到该服务器对象,但是构建服务器对象的文件不会返回任何内容。我不想修改该文件,因此我很难理解如何访问用于测试的服务器对象

我的服务器文件(部分)如下所示:

var express = require('express')

var app = express();

// Express Configuration
app.use(express.favicon()); //handles favicon request, which keeps it out of the log when using a browser :)
app.use(express.bodyParser()); //slurps up the body in chunks the node.js way :)
// ...and so on
我的摩卡咖啡测试文件是这样的

var request = require('supertest')
  , app     = require('../server.js')
  , assert  = require("assert");

describe('POST /', function(){
  it('should fail bad img_uri', function(done){
    request(app)
        .post('/')
        .send({
            'img_uri' : 'foobar'
        })  
        .expect(500)
        .end(function(err, res){
        console.dir(err)
        console.dir(res)
            done();
        })  
  })    
})

当我运行这个测试时,我收到一个关于app对象没有名为address的方法的投诉。我的问题是,是否有一种方法可以要求/调用server.js文件,以便应用程序对象在范围内?还是我做错了。我也尝试过使用http.js直接调用服务器,但也没那么幸运。谢谢

您需要在
server.js
中导出
app
对象:

var app = express();

module.exports = app;

...

运行此命令时,我得到的错误是:“TypeError:Object”没有方法“address”,stacktrace引用了我的测试文件中的行:“request(app)”完美!这正是我所需要的。Express默认情况下正在导出应用程序,但supertest仍抱怨找不到地址方法。在更高版本的express中可能存在问题?