Ваш запрос функции связан с проблемой?
Чтение того, что подделка может и чего нельзя делать, не ясно из документации.
Опишите желаемое решение
Точные методы, доступные для подделки, необходимо задокументировать.
Прежде всего, спасибо за Sinon, я считаю, что эта библиотека мощная и помогла мне написать множество тестов. Я прошу здесь улучшить документацию Fakes. Вот пример того, с чем я боролся.
Первое предложение документации Fakes гласит:
Подделка была представлена в Sinon с v5. Он упрощает и объединяет концепции от шпионов и заглушек.
Слово «слияние» здесь слишком расплывчато, чтобы понять, чем в конечном итоге окажется API подделки. Я пришел к выводу, что подделки, похоже, разделяют API со шпионами с некоторыми дополнительными заглушками, похожими на заглушки. Я пришел к такому выводу, потому что кажется, что у фальшивого объекта есть свойство called
как у шпиона (не могу найти это задокументировано нигде, кроме документации шпионов), и withArgs
, которое обычно доступно на заглушки, но для подделок не кажется доступным.
Подделкам определенно нужны документы получше. Может быть, к чему обратиться на предложенном (еще не определились, @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
завершен.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
. Лучше бы их как-то по-другому сделать
Первоначальный pr находится на https://github.com/sinonjs/sinon/pull/2360 , работа в стадии разработки.
Жду ваших отзывов.