2013-02-20 101 views
3

當服務器使用tinytest運行時可以測試Meteor客戶端嗎?這裏是我的例子只測試客戶端:使用tinytest在服務器運行時測試Meteor客戶端

Tinytest.add("Add object to a collection", function(test) { 
    var people = new Meteor.Collection("people"); 
    people.insert({"name": "Andrew"}, function(error, id) { 
    test.isNull(error); 
    }); 
}); 

只有一小會兒這個通過,但它然後進入「等待」的狀態。我也積極地認爲錯誤不是空的。

Meteor.Error {error: 404, reason: "Method not found", details: undefined} 

我知道這是因爲他們沒有與客戶端進行通信的服務器。當我嘗試在服務器和客戶端上運行此測試時,我仍然遇到與客戶端相同的問題。有沒有辦法在服務器運行時測試客戶端?

感謝,安德魯

+1

你有沒有嘗試過'新的Meteor.Collection'沒有參數(一個存根)? – Rahul 2013-02-20 17:34:44

+0

@Rahul不,我沒有嘗試過。我認爲這是有道理的,因爲我並不是真的想測試客戶端和服務器之間的通信/同步,但是我希望集合能夠按照預期在客戶端和服務器上工作。將集合名稱設爲null後,一切都很好。你想寫這個答案(建議使用存根)?謝謝! – 2013-02-20 18:46:57

+0

剛剛添加它作爲答案,謝謝! – Rahul 2013-02-20 19:17:29

回答

6

使用new Meteor.Collection不帶參數來創建不需要服務器的存根集合。請參閱the docs on Collections

如果您傳遞null作爲名稱,那麼您正在創建本地集合。它在任何地方都不同步;它只是一個本地暫存器,支持Mongo風格的查找,插入,更新和刪除操作。

5

這是一個異步的測試,所以你必須使用addAsync

Tinytest.addAsync("Add object to a collection", function(test, next) { 
    var people = new Meteor.Collection("people"); 
    people.insert({"name": "Andrew"}, function(error, id) { 
    test.isNull(error); 
    next(); 
    }); 
}); 

請注意下一個參數,它表示您在回調中完成。

+0

我應該在客戶端和服務器上運行它嗎?無論哪種方式,我嘗試過'客戶','服務器'和['客戶','服務器']。所有選項都產生相同的「等待」狀態。 – 2013-02-20 18:40:31

+0

這是使用'addAsync'的不正確方法。我已經爲你修好了。 – 2013-07-23 15:35:40