2012-01-12 3 views
5

Я пишу плагин, который использует существующий плагин, который я хотел бы издеваться.Как мне высмеять плагин jQuery?

плагин Я пишу выглядит вроде этого:

(function($){ 
    $.widget("myPlugin",{ 
    _create: function(){ 
     var otherControl = $("<div></div>"); 
     otherControl.pluginWhichShouldBeMocked({foo: "bar"}); 
     this.element.append(otherControl); 
    } 
    }); 
})(jQuery); 

И у меня есть тест жасмин, какой вид выглядит следующим образом:

describe("When creating", function(){ 
    var element; 
    var passedOptions; 
    beforeEach(function(){ 
    jQuery.pluginWhichShouldBeMocked = function(options){ 
     passedOptions = options; 
    } 
    element = $("<div></div>"); 
    element.myPlugin(); 
    }); 

    it("should create the other plugin and pass 'bar' to it as the foo parameter", function(){ 
    expect(passedOptions.foo).toEqual("bar"); 
    }); 
}); 

Эта линия, где я пытался чтобы высмеять плагин:

jQuery.pluginWhichShouldBeMocked = function(options){ 
    passedOptions = options; 
} 

Фактический экземпляр плагина все еще называется.

ответ

0

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

создать макет плагин в испытательной установке, как это, с помощью метода для извлечения параметров, которые я могу использовать в моей утверждают:

describe("When creating", function(){ 
    var element; 
    var passedOptions; 
    beforeEach(function(){ 
    $.widget("pluginWhichShouldBeMocked",{ 
     getOptions: function(){ 
     return this.options; 
     } 
    }); 
    element = $("<div id='extenalPlugin'></div>"); 
    element.myPlugin(); 
    }); 

    it("should create the other plugin and pass 'bar' to it as the foo parameter", function(){ 
    expect(element.find("div#externalPlugin").pluginWhichShouldBeMocked("getOptions").foo).toEqual("bar"); 
    }); 
}); 
0

Недавно я прошел через это с Bootstrap модальный и фиксируется с помощью:

beforeEach(()=>{ 
    jQuery.fn.modal =() => {} 
}) 

describe(()=>{ 
    \\ ... do your thing 
}) 

afterEach(()=>{ 
    delete jQuery.fn.modal 
}) 
Смежные вопросы