【问题标题】:How to test an Express application when using app.use(express.static('public'));使用 app.use(express.static('public')) 时如何测试 Express 应用程序;
【发布时间】:2019-11-29 06:32:40
【问题描述】:

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

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

TypeError: _express.default.static is not a function

如果我删除

行,我的所有测试都会通过
  app.use(express.static('public'));

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

我已经模拟了 Express,如下面的代码所示,然而,express 是一个返回 Object 的函数,然后用于模拟 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 不是函数 我的其他测试按预期通过了

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

【问题讨论】:

  • express 是一个具有属性的函数。所以,如果你想模拟它,你将不得不模拟函数的行为和所使用的任何属性。
  • @jfriend00 你有一个例子说明如何为 express.static('public')) 做到这一点吗?我已经嘲笑了 get 使用和收听的 express 属性。但我不知道需要对上面的模拟进行什么更改才能模拟 express.static。
  • 抱歉,我不知道你会如何开玩笑。

标签: javascript node.js express testing jestjs


【解决方案1】:

这应该模拟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;
});  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2021-12-09
    • 2020-03-31
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多