У меня есть несколько тестов для тестирования API REST, и все в Typescript. Я также использую docker для Dockerize моего приложения. У меня есть 3 контейнера, которые REST_API_app, MongoDB, api_testing_container. Я создаю контейнер api_testing_container после того, как будут созданы другие два, и он использует тот же образ, который создан для REST_API_app. Также я видел много сообщений об увеличении времени ожидания мокко с использованием --timeut, но это не то, что я ищу, и это также не работает в моем коде, я пробовал это. Мой файл тестового примера выглядит следующим образом:
import { expect } from 'chai';
import request from 'supertest';
import app from '../app';
import * as mongodb from '../mongo/connection';
describe('Testing the API', () => {
before((done) => {
mongodb.connectMock()
.then(() => done())
.catch((err:any) => done(err))
})
it('OK, adding new employee', (done) => {
request(app).put('/add')
.send(<some JSON data>)
.then(res => {
...some matcher
done();
})
.catch(err => done(err));
})
it('OK, getting all employees', (done) => {
request(app).get('/all')
.then(res => {
...some matcher
done();
})
.catch(err => {
done(err)
});
})
it('OK, getting employee by ID', (done) => {
request(app)
.get(`/create/${id}`)
.then(res => {
...some matcher
done();
})
.catch(err => done(err));
})
})
Когда я пытаюсь запустить вышеупомянутые тестовые случаи, он отлично работает на локальной машине без docker, но когда я создаю все три контейнера с docker -compose он показывает следующую ошибку в тестовом контейнере
api_testing_container | Testing the API
1) "before all" hook for "OK, adding new employee"b
api_testing_container |
api_testing_container |
api_testing_container | 0 passing (20s)
api_testing_container | 1 failing
api_testing_container |
api_testing_container | 1) Testing the API
api_testing_container | "before all" hook for "OK, adding new employee":
api_testing_container | Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/usr/src/app/src/test/employee.spec.ts)
api_testing_container | at listOnTimeout (internal/timers.js:549:17)
api_testing_container | at processTimers (internal/timers.js:492:7)
Мое соединение mongodb для макета выглядит следующим образом. Кажется, ошибка в этом файле, когда я помещаю console.log ("test") перед mon goose .connect (), он не печатает его.
import mongoose from 'mongoose';
import {Mockgoose} from 'mockgoose';
export let connect = () => {
return new Promise((resolve, reject) => {
const uri: string = 'mongodb://mongo:27017/rest_api_container';
mongoose.connect( uri, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log('MongoDB Connected');
resolve();
})
.catch(err => {
console.log(err)
reject();
});
})
}
export let connectMock = () => {
return new Promise((resolve, reject) => {
let mockgoose: Mockgoose = new Mockgoose(mongoose);
mockgoose.prepareStorage()
.then(() => {
const uri: string = 'mongodb://mongo:27017/rest_api_container';
mongoose.connect( uri, { useNewUrlParser: true, useUnifiedTopology: true })
.then((res) => {
console.log('Mock MongoDB Connected');
resolve(res);
})
.catch((err :any)=> {
console.log(err)
reject(err);
});
})
.catch((err: any) => {
console.log(err);
reject(err)
})
})
}