Как использовать обещанный чай с Typescript?

Я пытаюсь использовать пакет chai-as-promised с TypeScript. Прежде всего, следующий код хорошо работает в простом JavaScript.

import * as chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised';

chai.use(chaiAsPromised);
const expect = chai.expect;

import * as sinon from 'sinon';

import { MyClass } from '.';

describe('Test my class', () => {
  let myClass: MyClass;

  beforeEach(() => {
    myClass = new MyClass();
   });

  it('Should render home', () => {
    const req = new RequestMock();
    const res = new ResponseMock();

    return expect(myClass.getHomePage(req, res)).to.be.fulfilled()
      .then((returnedValue) => {
        chai.expect(returnedValue).to.not.be.equal([]);
      });
  });
});

У меня следующая ошибка с этим кодом:

Как использовать обещанный чай с Typescript?

... и он указал на это:

interface PromisedTypeComparison {
    (type: string, message?: string): PromisedAssertion; // <<-- 
    instanceof: PromisedInstanceOf;
    instanceOf: PromisedInstanceOf;
}

Я испытал множество возможностей, и это тот, где я наиболее близок к решению, которое мне кажется.

Я хотел бы использовать функцию chai-as-promise, например fullfulled, rejected ... и т. д.

Как я могу это сделать?

Я еще не понимаю, как это должно работать, но добавление "" в качестве первого аргумента делает Typescript счастливым.

Tchoupinax 21.04.2021 15:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
1
5 421
4

Ответы 4

Я думаю, вы упускаете из виду «.eventually» или «.become» в утверждении. Попробуйте переписать его как

expect(myClass.getHomePage(req, res)).to.eventually.be.fulfilled;

Просто импортируйте chai-as-promised по умолчанию, и все будет работать:

import * as chai from 'chai'    
import chaiAsPromised from 'chai-as-promised'
chai.use(chaiAsPromised)

Вы можете написать так

import { use as chaiUse } from 'chai';
import * as chaiAsPromised from 'chai-as-promised';

chaiUse(chaiAsPromised);

Я думаю, что этот ответ - это то, что вам нужно:

Add the types for chai-as-promised and that should take care of the TypeScript errors:

npm install --save-dev @types/chai-as-promised

Работал у меня. Раньше я получал «Свойство« в конечном итоге »не существует для типа« Утверждение ».»; после добавления этого все остались довольны :-)

Мне сделал нужно поменять свой import на require.

До:

import chaiAsPromised from 'chai-as-promised';

После:

import chaiAsPromised = require('chai-as-promised');

Другие вопросы по теме