2017-06-18 217 views
3

我對JS很新,但我正在努力學習。事實上,我試圖嘲笑快遞。這裏是我的基類(降不下來,用於測試目的):用笑話表示嘲笑?

import compression from 'compression'; 
import express from 'express'; 

export default class Index{ 
    constructor(){} 

    spawnServer(){ 
     console.log(express()); 
     let app = express();  

     app.use(STATIC_PATH, express.static('dist')); 
     app.use(STATIC_PATH, express.static('public')); 
     etc... 
    } 
} 

這裏是我想達到的,在一個單獨的測試文件的測試...:

test('should invoke express once',() =>{  
    index.spawnServer();  
    expect(mockExpressFuncs().use.mock.calls.length).toBe(3); 
}) 

我的問題是 - 我如何讓測試覆蓋被測試課程的要求 - 甚至可能嗎?我想讓我的索引使用express的模擬版本,其中包括express()和express.require。

我沒有通過文檔閱讀,並試圖像:

const mockFunction = function() { 
     return { 
      use: useFn, 
      listen: jest.fn() 
     }; 
    }; 

beforeEach(() => {      
    jest.mock('express',() => {  
     return mockFunction; 
    }) 
    express = require('express'); 
}); 

但沒有工作 - 我究竟做錯了什麼? :(

感謝。

回答

1

創建模擬應用程序對象,並使其通過快遞模塊返回。

然後你就可以檢查多少次app.use已經使用或者expect(app.use.mock.calls.length).toBe(3)或更好expect(app.use).toHaveBeenCalledTimes(1)

稱爲
const app = { 
    use: jest.fn(), 
    listen: jest.fn() 
} 
jest.doMock('express',() => { 
    return() => { 
    return app 
    } 
}) 

test('should invoke express once',() => { 
    expect(app.use).toHaveBeenCalledTimes(1) 
})