6

私は奇妙な問題を抱えています、それは私が解決できないようです!これは私が書いている大きなフレームワークの一部ですが、同じ問題を抱えているテストコードをいくつか書いています。以下を参照してください。

!function ($, window, undefined) {

    // BASE FUNCTION
    var test = function (selector, context) {
        return new test.fn.init(selector, context);
    };

    // SELECTOR FUNCTIONS
    test.fn = {
        selector:   undefined,
        init:       function (selector, context) {
            // Use jQuery to build selector object
            this.selector = $(selector, context);
            return this;
        },

        // Create a popup dialog
        popup:      function (options) {
            this.selector.dialog();
        }
    },

    // Expose Carbon to the global object
    window.test     = test;

}(window.jQuery, window);

今私が以下を使うとき:

test('#popupLink').popup();

「TypeError:test( "#popupLink")。popup is notafunction」が表示されます。次のようなことをすれば、標準のjQuery関数を使用できるので、部分的に機能していることはわかっています。

test('#popupLink').selector.hide();

私は今精神的なブロックを持っているので、どんな助けでも大歓迎です。前もって感謝します!:)

アップデート

console.logを使用して返されたオブジェクトを表示しましたが、selector要素のみが含まれています。これは、プロトタイプを使用しなかったため意味があります。どうすれば修正できますか?

4

2 に答える 2

3
(function ($, window) {
    // BASE FUNCTION
    var test = function (selector, context) {
        return new test.fn.init(selector, context);
    };

    // SELECTOR FUNCTIONS
    test.fn = test.prototype = {
        constructor: test,
        init: function (selector, context) {
            // Use jQuery to build selector object
            this.selector = $(selector, context);
            return this;
        },

        // Create a popup dialog
        popup: function (options) {
            console.log('popup');
            return this;
        }
    };

    // Expose test to the global object
    window.test = test;
}(window.jQuery, window));

test.fn.init.prototype = test.fn;

作成されたテストインスタンスでコンストラクターとプロトタイプチェーンを見逃しました。

于 2012-06-19T21:44:03.960 に答える
0

私の場合、エラーは統合テストの追加中に発生し、呼び出そうとしている関数がモッククラスに属していることに気づきませんでした。(私はIntelliJを使用しています)ナビゲートしようとすると、IDEが実装された関数に移動するため、混乱しがちです。

エラーに記載されている関数をモックすると、それが解決されました。

于 2020-08-10T11:41:09.347 に答える