嘲笑用开玩笑表达?

时间:2017-06-18 20:02:15

标签: node.js unit-testing express jestjs

我对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 个答案:

答案 0 :(得分:7)

创建模拟应用程序对象并使其由快递模块返回。

然后,您可以查看使用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)
})