繁体   English   中英

使用 app.use(express.static('public')) 时如何测试 Express 应用程序;

[英]How to test an Express application when using app.use(express.static('public'));

我无法模拟 app.use(express.static('public')); 在我添加这一行之前,我的所有测试都有效。我以前使用相同的方法测试了快速服务器,但是,这是我第一次使用这个 express.static 命令。

在我添加这行代码后,我现在在我的测试中得到这个错误 -

TypeError: _express.default.static is not a function

如果我删除该行,我所有的测试都会通过

  app.use(express.static('public'));

但是,我需要这条线,因为我在其他地方的应用程序中提供了一些静态图像。

我已经模拟了 Express,如下面的代码所示,但是,express 是一个返回对象的函数,然后它用于模拟 get()、use() 和 listen() 调用。

现在我已经添加了 express.static('public') 看起来 express 现在也是一个静态对象。

所以我需要调整

jest.mock('express', () => .... 

部分?

只是不知道如何模拟这一行 - app.use(express.static('public'));

Express - Server.js 文件

const start = () => {
  const port = process.env.port || 7000;
  const app = express();

  app.use(bodyParser.json());
  app.use(cors());
  app.use(express.static('public'));
...
}

Test -  Server.test.js File 


jest.mock('express', () =>
  jest.fn(() => ({
    get: jest.fn(),
    use: jest.fn(),
    listen: jest.fn()
  }))
);

jest.mock('body-parser', () => ({
  json: jest.fn()
}));

jest.mock('cors');

describe('app set up correctly ', () => {
  beforeEach(() => {
    jest.clearAllMocks();
    server.start();
  });

  it('should initialise express server', () => {
    expect(express).toHaveBeenCalled();
  });

我希望修改模拟调用以模拟静态调用,这样我就不会再收到此错误 TypeError: _express.default.static is not a function 而我的其他测试按预期通过

任何人都可以提供的任何帮助都非常感谢。

这应该模拟express.static方法:

jest.mock('express', () => {
  const mockedExpress = () => {
    return {
      get: jest.fn(),
      use: jest.fn(),
      listen: jest.fn(),
    }
  };
  Object.defineProperty(mockedExpress, "static", { value: jest.fn() });
  return mockedExpress;
});  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM