2012-01-12 16 views
5

Estoy escribiendo un plugin que utiliza un plugin existente que me gustaría burlar.¿Cómo me burlo de un plugin jQuery?

El plugin que estoy escribiendo se ve algo así como esto:

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

Y tengo una prueba de jazmín, que tipo de parece a esto:

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"); 
    }); 
}); 

Esta línea es donde he tratado para simular el complemento:

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

La instancia del complemento real sigue siendo llamada.

Respuesta

0

Ok. Solo encontré la manera de hacerlo, no estoy seguro de si es el mejor pero funciona para mis propósitos.

puedo crear un plugin simulacro en la configuración de prueba como esta, con un método para recuperar las opciones que puedo usar en mi aserción:

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

recientemente pasé por esto con Bootstrap modal y fija a:

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

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

afterEach(()=>{ 
    delete jQuery.fn.modal 
}) 
Cuestiones relacionadas