Как тестировать внутренние функции в плагине jquery? - PullRequest
6 голосов
/ 30 марта 2011

в плагине jQuery я создал вспомогательные функции, как это

(function($) {

  var someHelperFunction = function(s, d) {
    return s*d;
  }
  var someOtherHelperFunction = function(s) {
    return s*2;
  }

// here goes the normal plugin code

})(jQuery);

теперь я хочу вызвать someHelperFunction извне, чтобы иметь возможность его модульного тестирования, это возможно как-то?

Ответы [ 5 ]

2 голосов
/ 30 марта 2011

За этот связанный вопрос , я бы сказал, просто протестируйте внешний интерфейс.

Но если вы должны протестировать эти методы изолированно, вам придется тестировать «копии»их вне контекста их развертывания в качестве внутренних методов.Другими словами, создайте объект, в котором они не будут доступны клиентскому коду, и затем предварительно обработайте эти версии вместе с внешним сценарием.Похоже, много работы, но эй, в этом смысл скрывать методы, верно?(Чтобы сделать их недоступными.)

1 голос
/ 07 августа 2012

Вам также может понравиться проверка документации на JavaScript. Мне известны две реализации: doctest.js Яна Бикинга и моя doctest .

.
1 голос
/ 31 марта 2011

Если внутренние функции нуждаются в тестировании, это хороший индикатор того, что они должны быть где-то в отдельном модуле и внедряться как зависимости и использоваться в реализации открытого интерфейса ваших объектов. Это более «проверяемый» способ сделать это.

var myActualImplementationTestTheHellOutOfMe = function(s, d) {

    return s*d;

}

(function($, helper) {

  var someHelperFunction = function(s, d) {
    return helper(s, d);
  }
  var someOtherHelperFunction = function(s) {
    return s*2;
  }

// here goes the normal plugin code

})(jQuery, myActualImplementationTestTheHellOutOfMe);
0 голосов
/ 30 марта 2011

помощники находятся внутри плагина, который является анонимной функцией, и вы не можете получить доступ к переменным, объявленным внутри него.
Если вы хотите проверить это, отбросьте ключевое слово var перед функциями.Это объявит функции как глобальные (прикрепит их к объекту окна), предоставляя им возможность быть видимым из области окна (вызывая someHelperFunction или window.someHelperFunction).
, для тестирования:

(function($) {
    someHelperFunction = function(s, d) {
        return s*d;
    }
    someOtherHelperFunction = function(s) {
        return s*2;
    }
     // here goes the normal plugin code
})(jQuery);

после окончания тестирования, добавьте ключевое слово var еще раз.

Обновление
Я думаю, что лучше было бы сгруппировать ваши тестируемые функциив объекте - и построить API.Затем, по тому же принципу, вы можете сделать этот API видимым в глобальной области видимости или нет:

(function($, global) {
    someHelperFunction = function(s, d) {
        return s*d;
    }
    someOtherHelperFunction = function(s) {
        return s*2;
    }

    var api = {
        someHelperFunction: someHelperFunction,
        someOtherHelperFunction: someOtherHelperFunction
    };

    // decide whether you want to expose your api or not 
    if(makeGlobal) {
        global.api = api;
    }
})(jQuery, this);
0 голосов
/ 30 марта 2011

взгляните на qunit , модульный тест JavaScript lib

...