Так что в последнее время компания наконец-то сделала тестирование обязательным (зачем еще людям добровольно писать тест???? :) так что мне пришлось познакомиться с этими монстрами — мокко, чай, синон и простыми инструментами, такими как проверка охвата кода на хх% и что тесты проходили, прежде чем он мог подняться в репо. Итак, вот мои итоговые заметки!

ШПИОН

  • Самая основная форма «проверки» функции
  • Может сделать существующую функцию все еще работающей, но сообщить, сколько раз она запускалась, срабатывала с каким значением, возвращала какое значение и т. д.

Использовать:

  • пусть шпион = sinon.spy (объект, «метод»)

Тестировать

  • sinon.assert.callOnce(шпион)
  • sinon.assert.call(шпион)
  • sinon.assert.callWith(spy, arg1, arg2, …)
  • (или без использования sinon.assert, используя утверждения chai)
  • ожидать (stubbedGenerateResult.call).to.be.true;
  • ожидать(ожидать заглушкиGenerateUrl.returnValues[0]).to.have.string(‘accessToken’);

Закрывать:

  • шпион.восстановить()

http://sinonjs.org/releases/v4.5.0/spies/

заглушка

  • Второй уровень — вместо того, чтобы запускать функцию и просто проверять, теперь вы можете захватить функцию.
  • Вы можете заставить его возвращать что-то еще, что вы хотите (используя return) Или вы можете заставить его возвращаться (чтобы следующая функция все еще выполнялась) Или вы заставляете его возвращать новые аргументы, которые вы хотите передать (пока не очень уверен, как)

Использовать:

  • пусть заглушка = sinon.stub(объект, "метод").returns(valueYouWant)

Чтобы проверить (из-за возвращаемого значения, которое вы ему передали, последующие функции теперь будут возвращать то, что вы хотите)

  • ожидать(ожидать заглушкиGenerateUrl.returnValues[0]).to.have.string(‘accessToken’);

Закрывать:

  • заглушка.восстановить()

http://sinonjs.org/releases/v4.5.0/stubs/

УТВЕРЖДАТЬ

  • Вы можете утверждать об успехе/неуспехе, а также утверждать аргументы, утверждать возвращаемые значения и даже проверять порядок вызовов.
  • sinon.assert.threw(spyOrSpyCall, исключение);
  • sinon.assert.callOrder(spy1, spy2, …)

http://sinonjs.org/releases/v4.5.0/assertions/

ПРОКСИКВАЙР

Proxyquire берет на себя функции require и позволяет внедрять подделки в любом месте цепочки зависимостей.

Для требований, которые вы не берете на себя, и для методов, которые вы не определяете для требований, которые вы берете на себя, все вернется к исходному. (noCallThru позаботится о том, чтобы они не отступили, даже если вы не определите)

Пример:

require WechatClient from ./index, но сам WechatClient требует запроса, который мы не хотим вводить. Следовательно, нужно заменить «запрос» из ./index на RequestMock.

const WechatClient = proxyquire(‘./index’, {
‘request’: RequestMock
})
let RequestMock = {
post: (params, cb) => cb()
};

ИЗМЕИВАЕТ

  • Mocks - это третий уровень sinon, и вместо того, чтобы брать на себя функцию, вы берете на себя весь объект/класс и все его методы.

Использовать:

  • вар макет = sinon.mock(obj);
  • sinon.mock(obj).expects(‘method’) напишите здесь свои ожидания;
  • макет.проверить()

Пример:

  • var mock = sinon.mock(jQuery)
  • sinon.mock(jQuery).expects("ajax").как минимум(2).как минимум(5);
  • макет.проверить()

http://sinonjs.org/releases/v4.5.0/mocks/

ДРУГИЕ

CI — Хаски, Дженкинс проведут все тесты, прежде чем разрешить фиксацию

Тестовое покрытие — Стамбул, Нью-Йорк, чтобы проверить, сколько процентов вашего базового кода выполнено в вашем тесте.

http://www.chaijs.com/api/bdd/