Jest SpyOn Array.prototype.pu sh функция - как я могу шпионить? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть личное свойство в классе, где я храню массив объектов

class myClass {
   private objects: any = [];
   public addObject(object: any): any {
      objects.push(object);
   }
}

Я хочу проверить в шутку, был ли вызван pu sh. Как мне это сделать? Моя текущая реализация не работает.

describe('myClass ', () => {
   test('should add object to objects array', () => {
      const pushSpy = jest.spyOn(Array.prototype, 'push');
      const obj = new myClass();

      obj.addObject({fakeObj})

      expect(pushSpy).toHaveBeenCalled();
   }
}

1 Ответ

0 голосов
/ 09 марта 2020
Ключевое слово

private предназначено только для TypeScript, но не для JavaScript. После компиляции модификаторы доступа к свойству / методу будут удалены. Вы по-прежнему можете получить к ним доступ с помощью точки и квадратных скобок. Чтобы игнорировать проверку типа TS C, мы используем квадратные скобки способом.

index.ts:

export class MyClass {
  private objects: any = [];
  public addObject(object: any): any {
    this.objects.push(object);
  }
}

index.test.ts:

import { MyClass } from './';

describe('60507395', () => {
  it('should add object', () => {
    const myClass = new MyClass();
    const pushSpy = jest.spyOn(myClass['objects'], 'push');
    myClass.addObject({});
    expect(pushSpy).toBeCalledWith({});
    expect(myClass['objects']).toHaveLength(1);
  });
});

Результаты модульного тестирования со 100% покрытием:

 PASS  stackoverflow/60507395/index.test.ts (9.733s)
  60507395
    ✓ should add object (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:        11.604s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...