代码之家  ›  专栏  ›  技术社区  ›  Charles Duporge

TypeError:应用程序。地址不是函数

  •  3
  • Charles Duporge  · 技术社区  · 8 年前

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

    包含测试的文件-->用户路由。规范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);
                             })
            })
        })
    })
    

    应用程序。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
    

    我很确定这个问题来自应用程序。js或用户路由。spec.js,我测试了添加 module.exports = server; 在我的应用程序结束时。js,我也看到过关于agant关键字的讨论,但我不知道是关于 知道交易在哪里吗?

    1 回复  |  直到 8 年前
        1
  •  13
  •   Christian Santos    8 年前

    你需要确保 app.js 正在导出Express server,以便可以在中导入 user-routes.spec.js .

    首先分配结果 app.listen ,然后将该变量设置为 应用程序。js公司 :

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