Mon goose createConnection возвращает неопределенное значение, когда оно находится внутри Jest - PullRequest
0 голосов
/ 23 апреля 2020

Я использую 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.

Это правильный способ тестирования? Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...