2017-02-03 6 views
0

정말 내 단위 테스트를 시작하고 싶습니다, 그래서 나는 몇 가지 플러그인을 내가 QUnit을 사용하여 작성한 테스트를 추가하기 시작할 생각. 그러나, 나는 특성과 방법을 함께 그룹화하기 위해 내 플러그인 내에 맞춤 클래스/오브젝트를 만들고 싶다. 그 위에는 고유 한 개인 방법이 있습니다.단위 테스트 개인 함수 내에서 jQuery 플러그인

단위 테스트를 허용하도록 내 코드를 리팩토링하는 가장 좋은 방법을 고민하고 있습니다. 모든 것을 공개하거나 여러 개의 사용자 지정 개체로 창 개체를 오염시키는 아이디어가 마음에 들지 않습니다. 하지만 어쩌면 그 일이 어떻게 이루어져야할까요?

아마도 나는 워크 플로우에 관해서 더 좋은 아이디어가 필요합니다. 어쩌면 개발 용 스크립트가 모두 공개 되듯이, 내가 Grunt를 사용하여 축소하면 익명의 기능으로 다시 되돌려 놓을 수 있습니까?

어쨌든, 필자는이 내용을 필자가 플러그인 구조에 관해서 말한 것에 대한 조잡한 예라고 신속하게 썼다. 어떻게하면 'getNewPosition'메소드를 테스트 할 단위 테스트를 작성합니까?

(function($) { 
"use strict"; 

// Custom Object 
var MyClass = function(element) { 
    var speed = 1; 
    // Private Function 
    var getNewPosition = function() { 
     var currentPosition = parseFloat(element.css("top")); 
     return currentPosition + speed; 
    } 

    return { 
     // Public Function 
     update: function() { 
      var newPosition = getNewPosition(); 
      element.css("top", newPosition.toString() + "px"); 
     } 
    } 
}; 


// jQuery Plugin 
$.fn.myPlugin = function() { 
    var aryElements = []; 
    this.each(function() { 
     var myObj = new MyClass($(this)); 
     aryElements.push (myObj); 

    }); 

    $(window).on("scroll", function(event) { 
     $.each(aryElements, function(i, element) { 
      element.update(); 
     }); 

    }); 
    return this; 
}; 
}(jQuery)); 

모든 도움을 주시면 감사하겠습니다. 감사!

답변

0

JS에서 개인용 메소드를 테스트하는 쉬운 방법은 없습니다. 공개 된 것에 대한 테스트를 작성하고 모든 코드 분기를 테스트하여 개인 함수가 호출되도록하는 것이 좋습니다. 귀하의 코드 예제에서 MyClass 생성자는 전역 적으로 사용할 수 있으며 update 메서드는 getNewPosition()을 호출하므로 update을 철저히 테스트 할 수 있으며 따라서 getNewPosition을 실행하여 결과를 테스트 할 수 있습니다.

내가 QUnit에서이 같은 것을 써서 :

QUnit.test("Test MyClass update", function(assert) { 

    var elem = $('<div />'); 
    elem.css('top', '10px'); 
    var c = new MyClass(elem); 
    c.update(); 

    assert.equal(elem.css('top'), '11px', 'top has been updated'); 
});