diff --git a/src/pubsub.js b/src/pubsub.js index ebbacea..cb33e21 100755 --- a/src/pubsub.js +++ b/src/pubsub.js @@ -153,6 +153,10 @@ https://github.com/mroderick/PubSubJS * you need to unsubscribe **/ PubSub.subscribe = function( message, func ){ + if ( typeof func !== 'function'){ + return false; + } + // message is not registered yet if ( !messages.hasOwnProperty( message ) ){ messages[message] = []; diff --git a/test/test-subscribe.js b/test/test-subscribe.js index ecbad0c..80dcf76 100644 --- a/test/test-subscribe.js +++ b/test/test-subscribe.js @@ -3,6 +3,7 @@ PubSub, buster, assert, + refute, require, sinon */ @@ -69,7 +70,33 @@ } // make sure all tokens are different - TestHelper.assertAllTokensDifferent( tokens ); + TestHelper.assertAllTokensDifferent( tokens ); + }, + + 'should return false when subscriber argument is not a function' : function(){ + var invalidSubscribers = [undefined, null, 'a string', 123, [], {}, new Date()], + topic = TestHelper.getUniqueString(), + i; + + for ( i = 0; i < invalidSubscribers.length; i++ ){ + assert.equals(PubSub.subscribe(topic, invalidSubscribers[i]), false); + } + + assert.equals(i, invalidSubscribers.length); + }, + + 'must not throw errors when publishing with invalid subscribers' : function(){ + var invalidSubscribers = [undefined, null, 'a string', 123, [], {}, new Date()], + topic = TestHelper.getUniqueString(), + i; + + for (i = 0; i < invalidSubscribers.length; i++){ + PubSub.subscribe(topic, invalidSubscribers[i]); + } + + refute.exception(function(){ + PubSub.publish(topic, TestHelper.getUniqueString()); + }); } });