2013-06-14 25 views
9

Sau một đoạn phim ngắn lãng mạn với mô hình mô-đun tiết lộ, tôi đã nhận ra một thiết lập lại khi nói đến các mô-đun thử nghiệm đơn vị. Tuy nhiên, tôi không thể quyết định xem đó có phải là phương pháp tiếp cận của tôi để thử nghiệm một mô-đun hay liệu có một số dạng công việc xung quanh hay không.Tiết lộ mô hình mô-đun - Kiểm tra đơn vị với Jasmine

Xét đoạn mã sau:

var myWonderfulModule = (function() { 
    function publicMethodA (condition) { 
    if(condition === 'b') { 
     publicMethodB(); 
    } 
    } 

    function publicMethodB() { 
    // ... 
    } 

    return { 
    methodA : publicMethodA, 
    methodB : publicMethodB 
    } 
}()); 

Nếu tôi muốn kiểm tra (sử dụng Jasmine) những con đường khác nhau dẫn qua publicMethodA để publicMethodB. Tôi có thể viết một bài kiểm tra nhỏ như vậy:

it("should make a call to publicMethodB when condition is 'b'", function() { 
    spyOn(myWonderfulModule , 'publicMethodB'); 
    myWonderfulModule.publicMethodA('b'); 
    expect(myWonderfulModule.publicMethodB).toHaveBeenCalled(); 
}); 

Nếu tôi hiểu chính xác, có một bản sao của PublicMethodB trong phần đóng không thể thay đổi được. Thậm chí nếu tôi thay đổi myWonderfulModule.publicMethodB sau:

myWonderfulModule.publicMethodB = undefined; 

gọi myWonderfulModule.publicMethodA vẫn sẽ chạy phiên bản gốc của B.

Ví dụ trên là tất nhiên đơn giản nhưng có rất nhiều kịch bản tôi có thể nghĩ về nơi nó sẽ thuận tiện cho các đường dẫn điều kiện thử nghiệm đơn vị thông qua một phương thức.

Đây có phải là hạn chế của mô hình mô-đun tiết lộ hoặc đơn giản là lạm dụng thử nghiệm đơn vị không? Nếu không phải là những gì xung quanh có sẵn cho tôi? Tôi đang xem xét di chuyển đến một cái gì đó như RequireJS hoặc quay trở lại mã phi mô-đun.

Bất kỳ lời khuyên nào được đánh giá cao!

Trả lời

8

Bạn không thể kiểm tra các phương pháp thực tập của việc đóng. Và bạn cũng không nên theo dõi nó. Hãy suy nghĩ về mô-đun của bạn như một hộp đen. Bạn đặt một cái gì đó vào và bạn có được một cái gì đó ra. Tất cả những gì bạn nên kiểm tra là điều bạn nhận được từ mô-đun của bạn là điều mà bạn mong đợi.

Làm gián đoạn các phương thức trong mô-đun của bạn không có ý nghĩa gì nhiều. Hãy suy nghĩ về nó. Bạn theo dõi nó, bài kiểm tra trôi qua. Bây giờ bạn thay đổi các chức năng để nó tạo ra một lỗi, kiểm tra vẫn vượt qua gây ra các chức năng vẫn được gọi nhưng bạn không bao giờ đề cập đến lỗi. Nếu bạn chỉ cần kiểm tra điều mà cames ra bạn không cần phải gián điệp trên phương pháp nội bộ gây ra, rằng họ được gọi là implicite khi kết quả của mô-đun là những gì bạn mong đợi.

Vì vậy, trong trường hợp của bạn, không có thứ gì đi vào và không có gì xuất hiện. Điều này không có ý nghĩa nhiều nhưng tôi tin rằng mô-đun của bạn tương tác với DOM hoặc thực hiện cuộc gọi ajax. Đây là những thứ mà bạn có thể kiểm tra (DOM) hoặc bạn nên theo dõi (ajax).

Bạn cũng nên tự làm quen với Inversion of Control and Dependency Injection. Đây là các mẫu giúp mô-đun của bạn dễ kiểm tra hơn nhiều.

0

Nếu bạn sử dụng từ khóa "this" khi bạn gọi publicMethodB() từ publicMethodA() nó sẽ hoạt động. Ví dụ:

var myWonderfulModule = (function() { 
    function publicMethodA (condition) { 
     if(condition === 'b') { 
      this.publicMethodB(); 
     } 
    } 

    function publicMethodB() { 
     // ... 
    } 

    return { 
     methodA : publicMethodA, 
     methodB : publicMethodB 
    } 
}()); 
Các vấn đề liên quan