2013-08-21 58 views
4

出於測試目的,如果我能夠執行某些測試函數等待同步結果,我的代碼會更好看。在node.js中編寫同步函數的簡單方法

我知道關於node.js中事件編程的主要思想,但是在同步運行的測試中阻塞處理器對我來說不是問題。

是否有任何簡單的(單線程將是最好的)解決方案來執行函數,該函數通過回調(err,ret)返回一些值以通過「return」返回該ret,並假裝執行是同步的。

+0

這是我一直在尋找的node.js問題。和你一樣,我只是想讓一個函數同步,並且像同步一樣返回。希望有人可以給出比使用異步,纖維等更好的答案,這仍然不會使該函數返回值! – samwize

+0

不幸的是,沒有更好的解決方案。在某些情況下,承諾模式可能是解決方案。 – Luman75

回答

5

您可以使用節點同步爲目的https://github.com/0ctave/node-sync

但總的來說,我建議你不這樣做。例如,摩卡測試框架允許您執行異步測試。另外異步瀑布https://github.com/caolan/async#waterfall是僞同步你的代碼的好方法。

我會說停留在異步思維框架。即使在測試時。

+0

當然,我不建議任何人使用它。在我的摩卡測試的具體情況下,這樣做會更好。 – Luman75

+0

當然,我知道。我的問題更多的是代碼組織。如果我需要在執行前準備幾個隨機參數,我的代碼看起來像一團糟。 – Luman75

0

摩卡已內置done回調函數來實現此目的。我用於我的代碼的模式:

describe('some spec', function() { 
    beforeEach(function (done) { 
     // common spec initalization code.. 
     common.init (function (err, stuff) { 
     done(err); 
     }); 
    }); 

    describe('particular case', function() { 
     var result, another; 

     beforeEach(function (done) { 
     // case init 1.. 
     case.init(function (err, res) { 
      result = res; 
      done(err); 
     }); 
     }); 

     beforeEach(function (done) { 
     // case init 2.. 
     case.init2(function (err, res) { 
      another = res; 
      done(err); 
     }); 
     }); 

    it ('should be smth', function() { 
     expect(result).to.equal(0); 
    }); 

    it ('should be smth else', function() { 
     expect(another).to.equal(1); 
    }); 

    }); 
}); 
+0

我知道。我的問題是關於不同的事情。 – Luman75

相關問題