Я использую Jest для тестирования моего приложения, разработанного на Typescript.
У меня есть класс, который создает соединение в своем конструкторе. Мне нужно это в конструкторе, чтобы я мог без проблем экспортировать класс.
mongoose.createConnection
не возвращает Promise. Поэтому я думаю, что это хороший способ сделать это.
//myconnection.ts
import * as mongoose from 'mongoose';
export class MyConnection{
this.mongoose_options = {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true
}
constructor(uri){
this.connection = mongoose.createConnection(uri, this.mongoose_options);
this.connection.on('connected', () => {
console.log('CONNECTED');
})
}
}
Когда я пытаюсь протестировать этот класс в Jest, я получаю undefined
вместо mongoose.Connection
import * as mongoose from 'mongoose';
import {MyConnection} from './myconnection';
it('should call mongoose.createConnection', () => {
const spy = jest.spyOn(mongoose, 'createConnection');
const uri = 'mongodb://localhost:27017/my-db';
const mycon = new MyConnection(uri);
expect(spy).toHaveBeenCalled();
});
Когда я запускаю jest, конструктор выдает ошибку, говоря, что this.connection
не определено
Cannot read property 'on' of undefined
Все отлично работает вне jest. Функция возвращает mongoose.Conncetion
, и я могу установить для нее все события.
Почему я получаю undefined
, когда нахожусь внутри Jest? Из документации goose нет упоминания undefined
в качестве возможного возвращаемого значения.
РЕДАКТИРОВАТЬ
Я также пытаюсь просто подключив mon goose без импорта моего класса
import * as mongoose from 'mongoose';
it('should call mongoose.createConnection', async () => {
const spy = jest.spyOn(mongoose, 'createConnection');
const uri = 'mongodb://localhost:27017/my-db';
const mycon = await mongoose.connect(uri);
expect(spy).toHaveBeenCalled();
});
Я все еще получаю undefined
.
Это правильный способ тестирования? Чего мне не хватает?