2017-10-14 138 views
0

是否可以與摩卡同步調用測試用例?例如,我有下面的代碼:摩卡:同步調用測試用例

context('Context of test suite',() => { 
    it('test case name',() => { 
    //call expect() a few times 
    }) 
}) 
console.log('foo') 

我要運行它,但我要保證foo將不被打印後,才測試用例已經執行,要麼通過或失敗。 it不會返回Promise,也不會返回context,所以我無法使用then。我想要什麼?

該測試用例存在於after塊內。

+0

你究竟想達到什麼目的?我相信你知道[XY問題](https://meta.stackexchange.com/a/66378) – Sidney

+0

我不明白這個問題。我試圖讓一個測試用例同步執行。 – ewok

+1

測試會同步運行,除非您在內部執行異步操作。如果你只調用'expect()'幾次就不會有問題。 –

回答

1

您可以移動console.log到嵌套after

describe('all my tests',() => { 

    it('#1', done => setTimeout(done, 500)) 
    it('#2', done => setTimeout(done, 500)) 
    it('#3', done => setTimeout(done, 500)) 

    after(() => { 

    context('Context of test suite',() => { 

     it('test case name',() => {}) 

     after(() => { 
     console.log('foo'); 
     }); 
    }) 

    }); 

}); 

雖然我很難理解爲什麼要使用這樣的設置。一個問題是,您不能在根級after(其中一個位於任何describe塊之外)中使用此設置,並且after不適用於其他測試,它意味着在測試之後清除

我可能會使用這樣的事:

describe('all my tests',() => { 

    it('#1', done => setTimeout(done, 500)) 
    it('#2', done => setTimeout(done, 500)) 
    it('#3', done => setTimeout(done, 500)) 

}); 

describe('Context of test suite',() => { 

    it('test case name',() => {}) 

    after(() => { 
    console.log('foo'); 
    }); 
}) 

即只需放置最後運行的套件即可。如果您願意,您可以將最後的after移到套件外部,並將其提升到根級掛鉤。