2

QUnitテストでは、オートコンプリートメソッド(jQuery UI)をモックアウトしたいのですが、テストを実行するたびに次のようになります。

test("Create_PassedContainer_RunsAutocompleteOnMatchingElement",function(){
    var $matchingInput = $('<input data-autocomplete-url="some"/>');
    var $dom = $('<div><input/></div>');
    $dom.append($matchingInput);
    var autocompleteWasCalled = false;
    $matchingInput.autocomplete = function(){ autocompleteWasCalled = true; };

    new Autocomplete($dom);

    ok(autocompleteWasCalled,"Should call autocomplete.");
});

結果が出ています:

TypeError: Object [object Object] has no method 'autocomplete'.

テスト中のコード:

function Autocomplete($container) {
    var $self = this;

    this.Initialize = function($container) {
        $self.$container = $container;
        $self.$text = $('*[data-autocomplete-url]', $container);
        $self.$value = $('input[type="hidden"]', $container);

        $self.$text.autocomplete();
    };

    $self.Initialize($container);
};

何でも役に立ちます。

4

1 に答える 1

2

オートコンプリートはプラグインです。これを試してください:

var oldAutocomplete = $.fn.extend(true, {}, $.autocomplete);
$.autocomplete = function(){
    autocompleteWasCalled = true;
}

/// Other code...

$.fn.autocomplete = oldAutocomplete;
于 2012-08-20T14:54:45.797 に答える