2011-11-10 59 views
4

我剛剛開始使用Knockout JS和QUnit來做單元測試我的挖空視圖模型。我遇到的問題是,如果我在qunit測試JavaScript文件中有多個測試,並且鏈接到包含我的View Model定義的JavaScript文件...我在一個測試中對View Model進行的任何更改當我在測試模塊中開始下一個測試時也存在。我習慣於有一個NUnit環境,我的狀態在測試之間自動清除。在QUnit測試中重置KnockoutJS ViewModel

是否有某種方法,模式或示例,某人可以指出哪個方法顯示了定義視圖模型的最佳方法,並使其重置爲每個單元測試開始的狀態?

回答

2

您是否使用module的第二個參數(生命週期)?如果沒有,你應該能夠在這個級別實例化視圖模式,是這樣的:

module("foo", { 
    setup: function() { 
     this.model = instantiateModel(); 
    }, 
    tearDown: function() { 
     // execute reset here 
    }); 

test("bar", function() { 
    ok(this.model.hasSomething() !== null, "msg"); 
}); 

從我記得讀,QUnit毒鼠強是在相同的範圍內setuptearDown運行,所以在定義的任何成員setup將在任何後續測試中訪問。

+0

OK ......這肯定看起來像什麼,我一直在尋找。你之前用過Knockout嗎?我是否需要在該instaniateModel類中調用ko.applyBindings(viewModel)?這會產生第二次電話會導致事情發生嗎? – Nick

+0

我用過淘汰賽,但沒有單元測試過。 'instantateModel()'是你必須實現的東西(你的任何自定義設置步驟) - 對不起,應該澄清一點。 –

+4

是的,你必須在'setup'中調用'ko.applyBindings'。在'tearDown'中,你還必須使用'ko.cleanNode'來移除對DOM節點的綁定。 –