在編寫自動化系統/集成測試時,第一步在所有測試「運行服務器」之前運行是很常見的。由於啓動服務器可能很昂貴,因此最好一次完成,而不是在每次單獨測試之前完成。 JUnit has easy functionality for doing this.在nodeunit中是否有等效的標準模式?還是需要手動滾動東西?在節點單元中的測試套件之前運行設置代碼
2
A
回答
2
我不認爲Nodeunit具有這種內置的功能,但許多人使用Grunt來處理這些任務。
1
是,Nodeunit有setUp()
和tearDown()
功能總是前後測試運行。您可以使用setUp()
啓動服務器這樣的:
var server = require("path/to/server.js");
exports.setUp = function(callback) {
server.start(8080, function() {
callback();
});
};
// run your tests here, setUp will be called before each of them
這是假設在server.js您有:test.done()
被調用後
exports.start = function() {
// start server here
}
的tearDown()
函數運行。
對於這樣的一個例子,看看在這裏的行動:https://github.com/jamesshore/Lessons-Learned-Integration-Testing-Node/blob/master/src/_server_test.js
的文檔是在這裏:https://github.com/caolan/nodeunit#groups-setup-and-teardown
2
由於使用nodeunit您的測試套件只是節點模塊,你可以採取封閉的優勢全球安裝/拆卸(僅針對該測試套件):
var myServer = require('./myservermodule');
var testsRun = 0;
var testsExpected = 3;
function startTest(test) {
test._reallyDone = test.done;
test.done = function() {
++testsRun;
test._reallyDone();
};
}
module.exports = {
'setUp' : function(cb) {
if (!myServer.server) myServer.start(cb);
else cb();
},
'tearDown' : function(cb) {
console.log("Tests run: " + testsRun + "/" + testsExpected);
if (testsRun===testsExpected) myServer.stop(cb);
else cb();
},
'sometest1' : function(test) {
startTest(test);
test.expect(1);
test.ok(true);
test.done();
},
'sometest2' : function(test) {
startTest(test);
test.expect(1);
test.ok(false);
test.done();
},
'sometest3' : function(test) {
startTest(test);
test.expect(1);
test.ok(true);
test.done();
}
};
0
有兩種方法可以做到這一點:
nodeunit測試文件中的所有測試都按順序同步運行。您可以在第一次測試中放置該組測試的設置代碼,然後在最後一次測試中放棄該設置代碼。
如果你想更正式地做到這一點,並且如果你不想爲單元測試設置Grunt,還有一個叫做「nodeunit-async」的模塊,它可以讓你運行全局設置和拆卸在你所有的測試之前和之後。在一組測試之前和之後,您可以運行全局設置並拆除一次。
下面是nodeunit-異步導語:
運行異步nodeunit測試的輕量級封裝。當您希望跨多個文件的每個測試運行常用全局設置或拆卸功能時,以及/或者夾具設置或拆卸功能在所有測試之前和之後運行一次特別有用。
專爲使用異步的自動和瀑布方法編寫的單元測試而設計。
相關問題
- 1. 在套件中的每個測試之前運行設置代碼
- 2. 在可可單元測試目標中運行測試之前運行腳本
- 3. 在py.test的每個測試之前和之後運行代碼?
- 4. JUnit @Parameterized函數在測試套件中的@BeforeClass之前運行?
- 5. 在節點中運行瀏覽器的javascript單元測試
- 6. TFS2010團隊建設 - 如何之前運行單元測試
- 7. 問題的運行單元測試測試套件OO
- 8. 在任何junit測試運行之前執行一些代碼
- 9. Grails測試 - 在完整測試階段之前/之後運行代碼
- 10. 在每個套件之前運行摩卡設置而不是在每次測試之前
- 11. 在運行單元測試的想法中設置類路徑
- 12. 如何在javascript代碼單元測試之前初始化mongodb?
- 13. 如何在課程代碼之前編寫單元測試?
- 14. 在啓動測試套件之前設置pythonpath
- 15. 如何在代碼中運行整個JUnit測試套件
- 16. 在套件和單獨運行測試
- 17. 嵌套函數運行單元測試
- 18. 如何在Python中的每個單元測試之前和之後運行特定代碼
- 19. 在代碼簽入之前運行一些測試自動化
- 20. 如何在每次「lein測試」之前運行Clojure代碼?
- 21. 節點CLI單元測試
- 22. 在代碼中運行Ruby單元測試(Test :: Unit)
- 23. Angular.js單元測試「inject()」在「運行」階段塊之前觸發
- 24. 如何從單元測試中的測試套件獲取當前運行的測試用例名稱
- 25. 如何在業務中的每個測試之前(或之後)運行代碼
- 26. 我想MVN測試運行單元前運行sh的文件測試
- 27. 如何在xUnit.net測試中只運行一次設置代碼
- 28. 如何在所有測試之前執行MSTest中的數據設置代碼的一行代碼
- 29. 在絕對執行的所有測試之前和之後運行代碼
- 30. 登記前運行單元測試
應作出更明確的,但在聯繫,我想要做的是有一個所有測試,而不是每次測試之前成立。 –
啊我明白了。對此感到抱歉。正如Brad所說,Grunt是一個不錯的選擇。 – tfogo