Sinon: Улучшение документов для подделок

Созданный на 27 июл. 2019  ·  18Комментарии  ·  Источник: sinonjs/sinon

Ваш запрос функции связан с проблемой?
Чтение того, что подделка может и чего нельзя делать, не ясно из документации.

Опишите желаемое решение
Точные методы, доступные для подделки, необходимо задокументировать.

Прежде всего, спасибо за Sinon, я считаю, что эта библиотека мощная и помогла мне написать множество тестов. Я прошу здесь улучшить документацию Fakes. Вот пример того, с чем я боролся.

Первое предложение документации Fakes гласит:

Подделка была представлена ​​в Sinon с v5. Он упрощает и объединяет концепции от шпионов и заглушек.

Слово «слияние» здесь слишком расплывчато, чтобы понять, чем в конечном итоге окажется API подделки. Я пришел к выводу, что подделки, похоже, разделяют API со шпионами с некоторыми дополнительными заглушками, похожими на заглушки. Я пришел к такому выводу, потому что кажется, что у фальшивого объекта есть свойство called как у шпиона (не могу найти это задокументировано нигде, кроме документации шпионов), и withArgs , которое обычно доступно на заглушки, но для подделок не кажется доступным.

Documentation Help wanted good first issue hacktoberfest pinned

Все 18 Комментарий

Подделкам определенно нужны документы получше. Может быть, к чему обратиться на предложенном (еще не определились, @mroderick?) Октябрьском хакатоне?

@ fatso83 Я бы хотел попробовать.

Могу ли я обновлять файл https://github.com/sinonjs/sinon/blob/master/docs/release-source/release/fakes.md ?

Также в рамках этой проблемы определяется, какие функции доступны для фиктивного объекта, возможно, со ссылкой на шпионскую и тупиковую документацию?

@peterjgrainger Замечательно ! Объем и такой подход кажутся разумными ...

Глядя на подделки кода, кажется, что у них тот же API, что и у шпиона, и ничего из заглушки.

Предложите обновить документацию, чтобы удалить ссылку на заглушки, так как это немного вводит в заблуждение и добавить, что API фейков такой же, как у шпионского

Кричите 😮, если это не так.

@peterjgrainger Спасибо, что spy и stub например, fakes.throws() совпадает с stub().throws()

@ mshaaban0 благодарит за вклад. Я посмотрю поближе

@ fatso83 @ mshaaban0 Думаю, я неправильно понял объем.

Я думал, что этот билет касается документации о фальшивой функции, например.

var fake = sinon.fake();

не непосредственно на самой подделке, т.е.

sinon.fake

Из того, что я вижу, sinon.fake() возвращает spy Я думаю, что эту часть документации необходимо уточнить, поскольку репортер запрашивает документацию по объекту, а не по статическим функциям.

Я пришел к такому выводу, потому что кажется, что поддельный объект имеет свойство called как и шпион (нигде не могу найти это задокументировано, кроме документации шпионов)

@itmayziii, похоже, имеет в виду sinon.fake() а не sinon.fake

Думаю, я понимаю, что теперь делать. Измените текущую документацию, чтобы указать, какие статические функции созданы шпионом, а какие - заглушкой, и измените формулировку merged чтобы лучше описать сочетание методов, а также попытайтесь выяснить, как различать sinon.fake и sinon.fake()

Не только вы неправильно поняли масштаб. Рад, что вы все прояснили для нас 😄

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.

Думаю, я понимаю, что теперь делать. Измените текущую документацию, указав, какие статические функции созданы шпионом, а какие - заглушкой, и измените объединенную формулировку, чтобы лучше описать сочетание методов, а также попытайтесь выяснить, как различать sinon.fake и sinon.fake ( )

Что нужно сделать в этом вопросе? Если кто-то пояснит, я хотел бы внести свой вклад.

Поскольку есть раздел под названием Instance properties , я думаю, что нужно объяснять только методы фальшивой функции. Если для фальшивой функции нет других методов, кроме шпионских, я думаю, нет причин для рефакторинга текущей документации.

Спасибо 😊

@srknzl TBH , я не очень хорошо помню, но вот некоторые моменты, которые могут нуждаться в улучшении:

  • Убедитесь, что список статических фабричных методов в sinon.fake завершен.
  • Преобразуйте и / или добавьте несколько запускаемых примеров Runkit (очень легко, но занимает немного времени)
  • Обновите ссылку в свойствах экземпляра, чтобы она указывала на тот же раздел в Spies.
  • Укажите, что перечисленные реквизиты - лишь один из многих из документации шпионов, и вы можете обратиться к нему для получения полного списка.
  • Уточните формулировку, чтобы стало ясно, что 1. Fakes API является альтернативой API заглушек и шпионов, которая может полностью заменить любое такое использование. 2. Он призван быть более простым в использовании, обслуживании и имеет гораздо меньшую поверхность API и позволяет избежать множества ошибок за счет наличия квази-неизменяемых экземпляров Fake (поведение не может быть изменено после создания (в отличие от заглушек), но у них есть внутреннее состояние, которое изменяется при использовании, например callCount и другая статистика) 3. Поддельный экземпляр имеет API шпиона (_is a_ Fake a Spy, @mroderick?)

Fakes API - это альтернатива API заглушек и шпионов, которая может полностью заменить все подобные виды использования.

Хотя это правда, я думаю, что проще использовать шпион вместо поддельного вызова + замена. Что с этим можно сделать?

const foo = {bar: () => {}};
const aSpy = sinon.spy(foo, 'bar');
foo.bar();

console.log(aSpy.called); // true

против

const foo = {bar: () => {}};
const barFake = sinon.fake(foo.bar);
sinon.replace(foo, 'bar', barFake);
foo.bar();

console.log(barFake.called); // true

Если бы это было так же просто, как шпионить, я бы использовал только подделки.

Редактировать:

Я выяснил, что могу это сделать:

const foo = {bar: () => {}};
sinon.replace(foo, 'bar', sinon.fake(foo.bar));
foo.bar();
console.log(foo.bar.called); // true

Возможно, стоит также задокументировать это использование.

@srknzl Я не уверен, что вызов replace что-то возвращает, но потенциально он может вернуть подделку. Это сделало бы его немного более плавным.

Только что проверено:

f = sinon.fake();
val=sinon.replace(o, 'b', f)
assert.equal(f,val);

это означает, что вы можете написать это:

const foo = {bar: () => {}};
const fake = sinon.replace(foo, 'bar', sinon.fake());
foo.bar();
console.log(fake.calledOnce); // true

да, имеет смысл. Также replace () не указывает свое возвращаемое значение на странице песочницы.

Только проясните, какие версии следует изменить? Все версии, в которых есть подделка, правда? Или просто следующая версия?

Еще один отзыв о документации в целом:

Я понимаю, что зеленые - это ссылки, но некоторые не зеленые также являются ссылками, например sinon.replace* , sinon.spy и sinon.stub . Лучше бы их как-то по-другому сделать
image

Первоначальный pr находится на https://github.com/sinonjs/sinon/pull/2360 , работа в стадии разработки.

Жду ваших отзывов.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги