Вернуть обещания из Ember 2.16. Тесты интеграции компонентов. - PullRequest
0 голосов
/ 30 октября 2019

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

const promise = this.sendAction('action')
promise.then(() => {
  //do stuff
});

Большая часть моего кода основана наэти .then и .catch обусловливают обещание, поэтому я хочу иметь возможность вернуть обещание, которое было успешным, но не получилось. Я слышал о Sinon, но, к сожалению, это только для Ember 3.4 и выше.

test('', function(assert){
  this.set('action', () => {
    // do assertions
    return new Promise(() => {return true} );
  });
});

В моем интеграционном тесте я могу смоделировать действие, но я сталкиваюсь с неопределенностью "обещания". Я пытался вернуть Text или другие значения, но при помещении отладчика в компонент обещание всегда не определено.

Я могу обойти это, добавив условие, которое проверяет, есть ли обещание,но поскольку большая часть моего кода находится внутри этих .then и .catch условных выражений, я хочу, чтобы мои тесты проходили через них, чтобы увеличить охват кода.

Как бы я возвратил обещание из макетированного действия втест на интеграцию?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Вы можете выставить свой вызов на sendAction, как в своем интеграционном тесте:

test('', function(assert) {
  this.sendAction = () => RSVP.resolve(true);

  this.render(hbs`{{some-component sendAction=sendAction}}`);
});

Это вернет обещание, ожидаемое вашим кодом.

Я рекомендую использовать RSVP библиотека в тех случаях, когда вам нужно использовать обещания.

0 голосов
/ 31 октября 2019

Оказывается, я неверно возвращал обещание.

return new Promise((reject) => {
  reject(true);
});

Был в состоянии вернуть обещание как "отклонено".

...