jquery - Catching errors on plugin initialization wth QUnit -


i'm using following format creating plugins.

$(function () {   function pluginname() {      /* more code here */    }    $.extend(pluginname.prototype, {     _attachplugin: function (target, options, value) {       target = $(target);        if (target.hasclass(this.shortenerclass)) {         return;       }        var instance = {         options: $.extend({}, this._defaults)       };        if (typeof instance.options.requiredoption === 'undefined') {         throw 'you need required option!';       }     },   });    var getters = [/* getters */];    function isnotchained(method, otherargs) {     if (method === 'option' && (otherargs.length === 0 ||         (otherargs.length === 1 && typeof otherargs[0] === 'string'))) {       return true;     }     return $.inarray(method, getters) > -1;   }    $.fn.pluginname = function (options) {     var args = array.prototype.slice.call(arguments, 1);      if (isnotchained(options, args)) {       return plugin['_' + options + 'plugin'].apply(plugin, [this[0]].concat(args));     }      return this.each(function () {       if (typeof options === 'string') {         if (!plugin['_' + options + 'plugin']) {           throw 'unknown method: ' + options;         }         plugin['_' + options + 'plugin'].apply(plugin, [this].concat(args));       } else {         plugin._attachplugin(this, options || {});       }     });   };    var plugin = $.pluginname = new pluginname(); })(jquery); 

when pass in options object, want make sure option there. if not, throw error _attachplugin method. error being thrown unable qunit assert error thrown. test looks this:

test('init error', function () {   throws($('#selector').pluginname(), 'throws error when missing required option.') }); 

i thought test error writing test so:

test('init error', function () {   throws($.urlshortener._attachplugin($('#selector')[0]), 'throws error'); }); 

either way write it, both tests dying on error being thrown _attachplugin qunit not catching.

you calling "throws" assertion passing function result block instead of passing function object called, that's why exception not being caught.

instead of:

test('init error', function () {   throws($('#selector').pluginname(), 'throws error when missing required option.') }); 

you should define test as:

test('init error', function () {   throws(function() { $('#selector').pluginname() }, 'throws error when missing required option.') }); 

this way qunit call function object , manage excpetions.

i put working example here: http://jsfiddle.net/hhk6u/9/

additional notes jquery plugins: note in example i've changed first line of plugin code from:

$(function () { 

to:

;(function ($) { 

this way avoids plugin start automatically, , practice.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -