2012-10-19 76 views
4

我有一個飛鏢類,我想單元測試,我想嘲笑到鏢電話:HTML庫,以確保如期我的類行爲。我看過的文章Mocking with Dart但它簡化版,提到如何嘲笑HTML庫。有人有建議嗎?飛鏢嘲諷HTML庫

+0

dart:html也包含非UI類,例如localStorage和sessionStorage,它們是客戶端持久性的基礎。我想確保我的數據存儲和加載例程正常工作,並且不會退化。我想嘲笑存儲類,但不能beause,嘲笑它,我必須導入鏢:在我的單元測試文件的HTML。但是Dart的酒吧系統不會允許這樣做。相反,它提供了錯誤:「不知道怎麼裝‘鏢:HTML’」。有沒有一種方法來模擬從DART類:HTML不導入鏢:HTML(在單元測試)? – devdanke

回答

1

這並不容易,因爲dart:html庫不是無頭的(即它需要瀏覽器)。我通常會盡量按照MVP的設計模式,以確保與DOM的交互的代碼僅在我看來類和所有BIZ邏輯是在主持人。這樣我就可以單元測試演示者而無需訪問DOM API。下面是一個小例子。

// view interface has no reference to dart:html 
abstract class View { 
    hello(); 
} 

// view impl uses dart:html but hands of all logic to the presenter 
class ViewImpl implements View { 
    View(this._presenter) { 
     var link = new Element.html("<a href="">a link</a>"); 
     link.on.click.add(_presenter.onClick()); 
     body.nodes.add(link); 
    } 

    hello() { 
     body.nodes.add(new Element.html("<p>Hello from presenter</p>"); 
    } 

    Presenter _presenter; 
} 

// presenter acts on the View interface and can therefor be tested with a mock. 
class Presenter { 
    Presenter(this._view); 

    onClick() => _view.hello(); 

    View _view; 
}