asyn c функция ожидают throw () sinon - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть класс:

export class MyClass {

   public async get(name: string): Promise<string> {

     if(name == "test") throw new Error("name is eql 'test'");

    // do something
   }

}

Я хочу проверить, что функция get ожидает бросок.

expect(myClass.get.bind(parser, "test")).to.throw("name is eql 'test'");

Но это не работает. Как это исправить?

1 Ответ

0 голосов
/ 22 апреля 2020

Если вы используете только chai, Chai не поддерживает ошибку подтверждения, генерируемую в асинхронных функциях. Вместо этого вы можете использовать try/catch + async/await. Альтернативный способ - использовать плагин chai-as-обещанный .

Например

index.ts:

export class MyClass {
  public async get(name: string): Promise<string> {
    if (name === 'test') {
      throw new Error("name is eql 'test'");
    }
    return '';
  }
}

index.test.ts:

import { MyClass } from './';
import chai, { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';

chai.use(chaiAsPromised);

describe('61342139', () => {
  it('should pass', async () => {
    const myClass = new MyClass();
    try {
      await myClass.get('test');
    } catch (error) {
      expect(error).to.be.instanceOf(Error);
      expect(error.message).to.be.equal("name is eql 'test'");
    }
  });

  it('should pass too', async () => {
    const myClass = new MyClass();
    await expect(myClass.get('test')).to.be.rejectedWith("name is eql 'test'");
  });
});

Результаты модульных испытаний с отчетом о покрытии:

  61342139
    ✓ should pass
    ✓ should pass too


  2 passing (12ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |      75 |       50 |     100 |      75 |                   
 index.ts |      75 |       50 |     100 |      75 | 6                 
----------|---------|----------|---------|---------|-------------------
...