Кипарис шпион работает непоследовательно между тестами - PullRequest
1 голос
/ 23 января 2020

Я слежу за звонками на fillText на холсте. Мой компонент обновляется каждые 1000 мс. Вот как я это настраиваю:

  1. В before я отправляю данные, которые отображают холст.
  2. В beforeEach я получаю контекст и устанавливаю шпиона на textSpy переменная, которая фиксируется всеми вспомогательными методами.
  3. В тесте я вызываю вспомогательные методы, которые:
    1. отправляют некоторые новые данные (скажем, это Серия с номером серии 1)
    2. дождитесь рисования холста (ожидая "Series 1", которая также отображается как html)
    3. утверждают, что шпион был вызван с текстом, соответствующим длине и идентификационный номер серии.

Удобные методы могут быть немного повсюду / трудно следовать, поэтому я надеюсь, что мое объяснение помогло:

describe('Displaying series after HScroll updates', () => {
  const sendSeriesUpTo = (len: number, interval = 0.02) => {
    // creates a series of the given length with values the given interval apart
    // and sends that series
  };

  before(setupNonReloadingTests);
  after(tearDownNonReloadingTests);

  describe('data updates', () => {
    let textSpy: SinonSpy;

    const getSpy = () => cy.context('series').then(context => textSpy = cy.spy(context, 'fillText'));

    // pass in an array of strings that must all have been called, but don't have to be the only calls
    const expectTextCall = (textArray: string[]) => {
      const textCalls = textSpy.getCalls().map(c => c.args[0]);
      textArray.forEach(text => expect(textCalls).to.include(text));
    };

    const sendAndExpectFrameCount = (frameCount: number, series: string[] = ['1'], allSeries: string = '1') => {
      sendSeriesUpTo(frameCount);
      cy.contains(`Series: ${ allSeries }`).then(() => {
        const arr = [`(${ frameCount } frames)`];
        series.forEach(s => arr.push(`SERIES ${ s }`));
        expectTextCall(arr);
      });
    };

    const sendAndExpectRange = (from: number, to: number) => {
      const diff = to - from + 1;
      const array = [...Array(diff).keys()];
      array.forEach(n => {
        sendAndExpectFrameCount(n + from);
      });
    };

    describe('receiving a single non-overflowing series', () => {

      before(() => {
        cy.sendStudyUpdateWithSeriesArray([1, 2, 3].map(n => createFdsObject()));
      });

      beforeEach(() => {
        cy.context('series').then(context => textSpy = cy.spy(context, 'fillText'));
      });

      describe('before overflowing', () => {
        it('displays the initial series, ' +
          'displays non-overflowing updates to the series', () => {
          sendAndExpectRange(80, 85);
        });
      });
      describe('overflowing', () => {
        it('scrolls to the end (most current) when a frame is added to overflow the screen', () => {
          sendAndExpectFrameCount(90)
        });

Хорошо, так что проблема в в том, что первый тест пройден, но второй тест говорит, что у шпиона не было никаких звонков.

Я думаю, что Cypress сбрасывает шпиона по умолчанию между тестами, но я также переустанавливал шпиона в моем beforeEach. Шпион видит вызовы в первом тесте, но не во втором. Браузер не перезагружается между тестами, поэтому шпион определенно использует один и тот же контекст холста каждый раз.

Что здесь не так!?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...