1. ホーム
  2. javascript

[解決済み] Mocha API Testing: 'TypeError: app.address is not a function' を取得する。

2022-02-10 11:37:05

質問

私の課題

私は非常にシンプルなCRUD APIをコード化し、最近になって chaichai-http を使用してテストを実行すると、問題が発生します。 $ mocha .

テストを実行すると、シェル上で次のようなエラーが発生します。

TypeError: app.address is not a function

私のコード

以下は、私のテストの1つのサンプルです ( /tests/server-test.js ):

var chai = require('chai');
var mongoose = require('mongoose');
var chaiHttp = require('chai-http');
var server = require('../server/app'); // my express app
var should = chai.should();
var testUtils = require('./test-utils');

chai.use(chaiHttp);

describe('API Tests', function() {
  before(function() {
    mongoose.createConnection('mongodb://localhost/bot-test', myOptionsObj);
  });

  beforeEach(function(done) {
    // I do stuff like populating db
  });

  afterEach(function(done) {
    // I do stuff like deleting populated db
  });

  after(function() {
    mongoose.connection.close();
  });

  describe('Boxes', function() {

    it.only('should list ALL boxes on /boxes GET', function(done) {
      chai.request(server)
        .get('/api/boxes')
        .end(function(err, res){
          res.should.have.status(200);
          done();
        });
    });

    // the rest of the tests would continue here...

  });

});

そして、私の express アプリのファイル( /server/app.js ):

var mongoose = require('mongoose');
var express = require('express');
var api = require('./routes/api.js');
var app = express();

mongoose.connect('mongodb://localhost/db-dev', myOptionsObj);

// application configuration
require('./config/express')(app);

// routing set up
app.use('/api', api);

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('App listening at http://%s:%s', host, port);
});

と( /server/routes/api.js ):

var express = require('express');
var boxController = require('../modules/box/controller');
var thingController = require('../modules/thing/controller');
var router = express.Router();

// API routing
router.get('/boxes', boxController.getAll);
// etc.

module.exports = router;

その他の注意事項

をログアウトしてみました。 server 変数で /tests/server-test.js ファイルを作成してからテストを実行してください。

...
var server = require('../server/app'); // my express app
...

console.log('server: ', server);
...

で、その結果が空のオブジェクトです。 server: {} .

解決方法は?

アプリのモジュールで何もエクスポートしていない。app.jsファイルに以下を追加してみてください。

module.exports = server