Я пытаюсь использовать Sinon протестировать компонент JS, который выглядит немного как это ...Sinon.JS - Как я могу получить аргументы от заглушки?
import Bootbox from "../helpers/bootbox";
import Guard from "../helpers/guard";
import UrlHelper from "../helpers/url-helper";
export default class DeleteButton {
/**
* Creates an instance of DeleteButton.
*
* @param {object} element The DOM element to make into a delete button.
*
* @memberOf DeleteButton
*/
constructor(element) {
Guard.throwIf(element, "element");
this.deleteUri = element.getAttribute("data-delete-uri") || UrlHelper.current.url().split('?')[0];
this.title = element.getAttribute("data-title") || `Delete the item?`;
this.cancelText = element.getAttribute("data-cancel") || `Cancel`;
this.confirmText = element.getAttribute("data-confirm") || `Remove`;
this.message = element.getAttribute("data-message") || `Do you want to delete the item? This cannot be undone.`;
this.successUri = element.getAttribute("data-success-uri");
this.errorMessage = element.getAttribute("data-error-message") || `Unable to complete operation.`;
}
/**
* Shows failure of deletion.
*
* @memberOf DeleteButton
*/
showFailed() {
Bootbox.alert({
message: this.errorMessage,
size: `small`,
backdrop: true
});
}
}
Тест выглядит следующим образом ...
it("Can show a fail message", function() {
$("body").append(`<a class="js-delete-button" data-id="123" data-delete-uri="/delete/123">Delete</a>`);
let objUt = new DeleteButton($(".js-delete-button").get()[0]);
let bootboxAlertStub = Sinon.stub(Bootbox, 'alert');
objUt.showFailed();
let args = bootboxAlertStub.args;
expect(args.message).to.equal(objUt.errorMessage);
});
Но я не могу получить мимо строки let bootboxAlertStub = Sinon.stub(Bootbox, 'alert');
, потому что я получаю сообщение от Karma, говорящего «Обязательно обернуть свойство объекта». Я также попробовал обернуть его в оболочку Sinon.test и с помощью this.stub, но ошибка была еще более тупой.
Я прошел через документы Sinon.JS и искал в Интернете, но я застрял. Код работает нормально.
Я посмотрел на это сообщение, которое похоже - Stubbing a class method with Sinon.js, но это не совсем то же самое.
Глядя на реальный основной bootbox JavaScript файла Я эффективно пытается окурок метод, который выглядит немного как это (вырубить) ...
exports.alert = function() {
// do something
};
Файл JS затем возвращает экспорт в то конец ...
return exports;
Глядя на некоторых проводок GitHub, кажется, что это не может быть возможно окурок именно эти вызовы, как основные вызовы функций полезности, а не функции объекта.
Я смягчили это (в ужасном пути), изменив свой Bootbox класс обертку следующим образом ...
export default {
/**
* Generates an alert box.
*
* @param {any} options
*/
alert: function(options) {
window.bootbox.alert(options);
},
/**
* Generates a confirmation dialog.
*
* @param {any} options
*/
confirm: function(options) {
window.bootbox.confirm(options);
}
}
Это решает одну проблему, и вводит другую. В то время как я могу теперь окурок Bootbox, когда потушил я не могу получить аргументы ....
(из теста)
let args = bootboxAlertStub.args;
Это расстраивает - Аргументы передаются в качестве комплексного аргумента так Утверждение 'calledWith' не собирается сокращать его.
Есть ли способ получить аргументы для заглушки?
Вы пробовали 'bootboxAlertStub.getCall (0) .args'? –
Чтобы уточнить: аргумент, переданный 'getCall', является« индексом »вызова; '0' является первым вызовом вашего заглушки,' 1' является вторым вызовом и т. Д. –