Jquery组件应该返回false

时间:2017-03-01 08:11:10

标签: javascript jquery qunit

我正在尝试使用BDD(行为驱动开发)创建一个jquery模块。

这是我的组件

(function($) {
    function MyModule(element){
        return false;        
    }

    $.fn.myModule = function() {
        var args = Array.prototype.slice.call(arguments, 1);
        return this.each(function() {
            new MyModule(this);
        });
    };

    $.fn.myModule.Constructor = MyModule;

})(window.jQuery);

这是我的测试

QUnit.test( "test", function( assert ) {
    assert.expect(1);

    var smallBox = $('<div/>',{'id':'smallBox'}).width(200).height(200);
    var result = smallBox.myModule();
    console.log(result); // This gives the HTML element itself but I am expecting it must be boolean false
    assert.notOk(result, "should return false" );
});

HERE IS FIDDLE

我有两个问题。

1-如果我的组件返回布尔值,该怎么办?这是错误的模式吗?

2-如何从组件中返回布尔值

1 个答案:

答案 0 :(得分:1)

那是因为你没有返回new MyModule,你返回的是this.each的返回值,这是一个jQuery对象。如果你想要一个布尔值,你将不得不返回一个布尔值。像这样:

$.fn.myModule = function() {
    var args = Array.prototype.slice.call(arguments, 1);

    this.each(function() {   // don't return here because then you'll return a jQuery object
        new MyModule(this);
    });

    return false;            // return a boolean (works)
};

从回调内部返回不会影响父函数的返回值。