Mock for Mon goose возвращает неопределенное значение? - PullRequest
0 голосов
/ 12 апреля 2020

Я пишу модульный тест, который проверяет мои Mon goose зависимости и проверяет ожидаемые взаимодействия.

Однако, несмотря на явный вывод из использования метода .create (), чтобы вернуть имитированный экземпляр IPostDocument (который расширяет Document с mon goose), я продолжаю получать сообщение «TypeError: Невозможно прочитать свойство 'save' of undefined", потому что мой метод create продолжает возвращать undefined, почти как при игнорировании моих настроек.

Метод тестируется:

  async create(
    title: string,
    author: string,
    technologies: string,
  ): Promise<IPostDocument> {
    const postToCreate = new Post(
      null,
      title,
      author,
      technologies,
      false,
      new Date(),
    );

    const post = await this.postModel.create(postToCreate);

    return await post.save();
  }

Неудачный тест:

  it('should call create and save from Mongoose', async () => {
    const mockPostModel = TypeMoq.Mock.ofType<Model<IPostDocument>>();
    const mockPostDocument = TypeMoq.Mock.ofType<IPostDocument>();

    mockPostDocument
      .setup(x => x.save())
      .returns(async () => mockPostDocument.object);

    mockPostModel
      .setup(x => x.create(TypeMoq.It.isAnyObject))
      .returns(async () => mockPostDocument.object);

    const postsRepository = new PostsRepository(mockPostModel.object);
    await postsRepository.create('A title', 'An author', 'Tech');

    mockPostModel.verify(
      async x => await x.create(TypeMoq.It.isAny),
      TypeMoq.Times.atMostOnce(),
    );
  });

Насколько я вижу, когда мой метод создания запущен, переменная post должна быть присвоена моему возвращенному макетированному документу, который имеет метод .save (), а не undefined.

Может кто-нибудь определить, где может быть проблема?

Спасибо

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