TypeError:app.address不是函数

时间:2017-12-08 16:33:34

标签: node.js express testing mocha

我使用Mocha来测试我的API,我创建了一个文件来测试我的用户路由,这些路由包含在自定义文件中。我还制作了一个空的JSON文件,在每次测试之前和之后分别进行填充和清空。

包含测试的文件 - > user-routes.spec.js:

const request = require("supertest")
require('chai').should()
const bodyParser = require("body-parser")

const app = require('./../../app')

const usersFixture = require("../fixtures/users-fixtures")

describe('Courses', () =>{

    beforeEach(() => { usersFixture.up() })
    afterEach(() => { usersFixture.down() })

    describe('Get users list', ()=>{
        it("Should get a list of all users", ()=>{
           return  request(app).get('/courses')
                        .then((res) => {
                            // res.body.should.have.lengthOf(1)
                            // res.body[0].title.should.eql("Ma course")
                        }).catch((err)  =>{
                            console.log(err)
                            throw new Error(err);
                         })
        })
    })
})

app.js:

const mongoose = require("mongoose");
const bodyParser = require("body-parser");
mongoose.Promise = require("bluebird");

const course_router = require('./routes/courses_route');
const user_router = require('./routes/users_route');
const type_course_router = require('./routes/type_courses_route');
const avis_router = require("./routes/avis_router");

const HttpError = require('./errors/http_error')
const NotFoundError = require('./errors/not_found')

const helmet = require("helmet");
const express = require("express");
const cors = require("cors");
const app = express();
const manip = require("./routes/manip");

app.use(helmet());
app.use(cors());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.disable('x-powered-by');

// app.use(file_upload());
app.use(bodyParser.json());
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.set('views',(__dirname +'/views/'));

//Ajout du slug course
app.use('/courses', course_router);
app.use('/users', user_router);
app.use('/type-courses', type_course_router);
app.use('/manip', manip);
app.use('/avis', avis_router);

app.use(function(req, res, next) {
  next(new NotFoundError());
});

app.use(function(err, req, res, next) {
  if (!(err instanceof HttpError)) {
    console.error(err)
    err = new HttpError(err.message || 'Unknown error')
    }
    res.status(err.statusCode)
  res.send(err.toJSON());
});

//Connexion à la bdd
mongoose.connect('mongodb://WecodeAdmin:AG56_'+'%25'+'ez3j6@ds241055.mlab.com:41055/runmoov_test')
                .then(
                    console.log("Connection à mongolab réussie")
                );

app.listen(3000, function(){
    console.log("API en cours d'exécution sur le port 3000");
}); 

启动测试文件时出错:

TypeError: app.address is not a function

我很确定问题来自app.js或user-routes.spec.js,我已经测试过在我的app.js末尾添加module.exports = server;,我&#39我们也看到了关于agant关键字的事情,但我不知道它是关于什么的 交易的任何想法?

1 个答案:

答案 0 :(得分:3)

您需要确保app.js正在导出您的Express服务器,以便可以在user-routes.spec.js中导入。

首先将app.listen的结果分配给变量,然后将该变量设置为app.js中的导出:

const server = app.listen(3000, function(){
    console.log("API en cours d'exécution sur le port 3000");
}); 

module.exports = server;