Я хотел бы знать, могу ли я заглянуть в функцию $ jQuery с помощью Jasmine.
Это код, который я хочу проверить.
var Wrapper = Wrapper || {};
Wrapper.Controls = {};
/**
* Use an anonymous function to initialize all JavaScript
*/
(function($) {
Wrapper.Controls.Utils = function() {
var external = {
showHide : function(namespace, controlNameStem){
var stem = namespace + controlNameStem;
$(stem + 'Controller').click();
}
};
return external;
};
return Wrapper.Controls.Utils;
}(Wrapper.jQuery));
Wrapper.jQuery находится в отдельном файле, который предварительно загруженным на жасмин перед загрузкой обертке. Он содержит окурок JQuery, который определяется как этот
var aliasjQuery = {};
var Wrapper = Wrapper || {};
Wrapper.jQuery = aliasjQuery;
Это означает, что, когда обертка инициализируется, aliasjQuery является объект, переданный в анонимной функции, как Wrapper.jQuery
Мой жасмин тест спецификации выглядит следующим образом:
describe("form control utils", function(){
var controlUtils = Wrapper.Controls.Utils();
var namespace = 'pluto_namespace';
var controlName = 'dualNationality';
it("showHide fires click event on controlNameController", function(){
var control = { click : function(){}};
spyOn(aliasjQuery, '$').andReturn(control);
spyOn(control, 'click');
controlUtils.showHide(namespace, controlName);
expect(control.click).toHaveBeenCalled();
});
});
Я приветствую любые комментарии, даже те, которые похожи на то, что «почему вы хотите это сделать?» и альтернативные решения, как я думаю, я слишком долго смотрел на это.
Просто примечание '$ (selector) .click()' не добавляет событие click, оно вызывает событие click. Чтобы добавить его, вы должны передать обработчик в качестве параметра. –
Да, настоящий код добавит событие щелчка, но пока я надеюсь, что это иллюстрирует проблему ОК. –
Ваша примерная программа просто сбивает меня с толку, потому что она не делает то, что вы говорите, что она делает для этого, и ни в коем случае не вижу, что вы действительно захватываете ссылку на jQuery. Хотя это просто придирчиво, я не могу взять ваш код и использовать его в любом месте, чтобы проверить его, не исправляя эти проблемы на моем конце. –