Тестирование анонимной функции asyn c внутри Rx JS из - PullRequest
1 голос
/ 17 апреля 2020

Я не могу найти способ проверки следующей функции:

  public toTest(): Observable<boolean> {
    return from(
      async(): Promise<boolean> => {
        return new Promise(resolve => { resolve(true); });
      }
    );
  }

До сих пор я пробовал что-то обычное:

  it('coverage toTest()', async (done) => {
    testeeObject.toTest().subscribe(
      result => {
        done();
      }
    );
  });

Покрытие как следующим образом:

enter image description here

Как мне придумать тест, чтобы получить покрытие этой функции?

Примечание: переписать функцию следует самое последнее предложение для рассмотрения. Это не настоящий код, я упростил создание обобщенного примера c, в анонимной функции asyn c, естественно, есть еще немного кода.

1 Ответ

2 голосов
/ 20 апреля 2020

Вы можете использовать jest.mock (moduleName, factory, options) для макета rxjs пакета и mockFn.mockImplementationOnce (fn) для макета реализации from оператор для rxjs.

index.ts:

import { from, Observable } from 'rxjs';

class MyClass {
  public toTest(): Observable<boolean> {
    return from(
      async (): Promise<boolean> => {
        return new Promise((resolve) => {
          resolve(true);
        });
      },
    );
  }
}

export { MyClass };

index.test.ts:

import { MyClass } from './';
import { from } from 'rxjs';

jest.mock('rxjs', () => {
  return { from: jest.fn() };
});

describe('61272624', () => {
  it('should pass', async () => {
    const myclass = new MyClass();
    let input: () => Promise<boolean>;
    const fromMock: any = (o) => {
      // We can get the async function you passed in `from` operator. 
      // Let the input variable keep it, we will execute it later.
      input = o; 
    };
    (from as jest.MockedFunction<typeof from>).mockImplementationOnce(fromMock);
    myclass.toTest();
    const actual = await input!();
    expect(actual).toBeTruthy();
  });
});

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

 PASS  stackoverflow/61272624/index.test.ts (13.553s)
  61272624
    ✓ should pass (4ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.ts |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        15.565s

enter image description here

исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61272624

...