Проверьте вспомогательные функции с помощью заглушки sinon - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в тестировании с помощью sinon, и меня немного смущает, как я могу протестировать все три типа возвращаемых значений (Moto, Sedan и Vehicle) с помощью заглушки или может быть, менее предпочтительно шпион. Кто-нибудь может мне помочь в этом?

transportType.js

export function transportType() {
  if (isMoto()) {
    return 'Moto';
  } else if (isSedan()) {
    return 'Sedan';
  } else {
    return 'Vehicle';
  }
}

function isMoto() {
  return window.matchMedia('only screen and (max-device-width: 700px)').matches;
}

function isSedan() {
  return window.matchMedia(
      'only screen and (min-device-width: 800px) and (max-device-width: 1000px)'
    ).matches;
}

carType_test.js

import {assert} from 'chai';
import sinon from 'sinon';
import * as transportTypes from './transportType';

describe('transportType', () => {
 it('returns "Moto" if width matches', () => {
  sinon.stub(transportTypes, 'transportType')
 })
})

1 Ответ

0 голосов
/ 18 сентября 2018

Невозможно проверить функции, которые не были экспортированы.Они должны быть экспортированы, чтобы быть проверенными.Как объяснено в этом ответе , также невозможно шпионить или имитировать экспорт модулей ES, которые используются в одном и том же модуле.

В этом случае тесты должны быть функциональными, то есть это не функции, а ихэффекты, которые должны быть высмеяны.Это возможно, так как они используют window.matchMedia, который можно смоделировать:

let matchMediaOriginal;

beforeEach(() => {
  matchMediaOriginal = window.matchMedia;
  window.matchMedia = sinon.stub();
}

afterEach(() => {
  matchMediaOriginal = window.matchMedia;
  window.matchMedia = sinon.stub();
}

it('returns "Moto" if width matches', () => {
  window.matchMedia.returns({ matches: true });
  expect(window.matchMedia).to.have.been.called.always.with('only screen and (max-device-width: 700px)');
  expect(transportType()).to.equal('Moto');
})

Пакеты типа match-media-mock также могут быть использованы.

...