简体   繁体   中英

Why does my node.js HTTP requests fail when my server is initialized by my test suite?

I have been trying to write a test suite to my node.js API project and one of their requirements is to control when the server starts and stops. For that, I wrote this code below with two functions: initializeWebServer and stopWebServer .

express.js

const initializeWebServer = () => {
  return new Promise((resolve, reject) => {
    app = express();

    /* some middlewares */

    app.use('/', userRoutes);

    httpServer = http.createServer(app);

    httpServer.listen(3000, (err) => {
      if (err) {
        reject(err);
        return;
      }

      resolve(app);
    });
  });
};

const stopWebServer = () => {
  return new Promise((resolve, reject) => {
    httpServer.close(() => { resolve(); });
  });
};

Using mocha to run my tests, I choose to manage my server connection with before and after hooks, using async/await syntax.

user.spec.js

let axiosAPIClient;

before(async () => {
  await initializeWebServer();
  const axiosConfig = {
    baseURL: `http://localhost:3000`,
    validateStatus: () => true
  };
  axiosAPIClient = axios.create(axiosConfig);
});

after(async () => {
  await stopWebServer();
});

describe('POST /api/user', () => {
it('when add a new user, then should get back approval with 200 response', async () => {
  const userData = {
    /* user props */
  };

  const response = await axiosAPIClient.post('/api/user', userData);

  expect(response).to.containSubset({
    status: 200,
    data: { message: 'User signed up.' }
  });

When axios (I tried fetch too) submit any HTTP request, mocha returns the following error: Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. . I tried to increase the timeout interval, but it didn't work.

If I execute my test suite without hooks, initializing my server with nodemon pointing to my index file with the same await initializeWebServer(); , HTTP requests work as it should.

I really don't understand why this is happening, I think it's something with mocha .

I did some debug tests and figured out that I forgot to set up a db connection when I run my test suite. It was a simple mistake.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM