Проверка, был ли вызван метод с Promise (Jest) - PullRequest
0 голосов
/ 31 мая 2018

У меня есть метод инициализатора, вызывающий другой метод, который возвращает обещание, например:

  initStuffAfterLoad() {
    const _this = this;
    const theInterval = window.setInterval(function() {
      if (thing) {
        window.clearInterval(theInterval);
        _this.getBanana()
          .then(response => {
            _this.getApple(response, _this);
          });
      }
    }, 100);
  }

, и мне нужно проверить, был ли вызван getBanana (jest / sinon).Пока у меня есть:

  test('init function calls getBanana', () => {
    let thing = true
    const getBananaSpy = sinon.spy();
    sinon.stub(TheClass.prototype, 'getBanana').callsFake(getBananaSpy).resolves();

    jest.useFakeTimers();
    TheClass.prototype.initStuffAfterLoad();
    jest.runOnlylPendingTimers();

    expect(getBananaSpy.called).toBeTruthy();
    TheClass.prototype.getBanana.restore();
 });

Однако он все еще получает false при утверждении.Я полагаю, что не правильно справляюсь с частью Promise - как лучше всего это сделать?

1 Ответ

0 голосов
/ 31 мая 2018

Я не знаком с sinon, но вот способ удовлетворить ваши потребности с помощью чистой шутки (еще лучше, когда он проверяет, что getApple вызывается, когда getBanana перезапускается:))

jest.useFakeTimers()

const _this = {
    getBanana: () => {},
    getApple: () => {}
}

const initStuffAfterLoad = () => {
    const theInterval = window.setInterval(function() {
        window.clearInterval(theInterval);
        _this.getBanana().then(response => {
            _this.getApple(response, _this)
        });
    }, 100);
}

test('', () => {
    let result

    _this.getBanana = jest.fn(() => {
        result = new Promise( resolve => { resolve() } )
        return result
    })
    _this.getApple = jest.fn()

    initStuffAfterLoad()    

    jest.runAllTimers()

    expect(_this.getBanana.mock.calls.length).toBe(1)
    return result.then(() => {
        expect(_this.getApple.mock.calls.length).toBe(1)
    })
})

проверенный код:)


PASS test \ temp.test.js √ (25 мс)

Наборы тестов: 1 пройден, 1 всего

Тестов: 1 пройден,1 всего

Снимков: 0 всего

Время: 2.489 с

...