如何使用jest模拟supertest中的模块?

时间:2017-08-28 08:57:42

标签: javascript node.js unit-testing

人!

我正在使用Jest和Supertest来测试我的节点服务器代码。

这是我的server.js

// server.js
const config = require('./lib/config')
...
const app = new koa()
...
module.exports = app

我想在使用Supertest时模拟config.js,这是我的server.test.js

// server.test.js
const supertest = require('supertest-as-promised')
describe('xxxxxx', ()=>{
  let app,server
  beforeEach(()=>{
    jest.mock('lib/config',()=>({
      uri: '/path',
      apiPrefix: '/prefix'
    }))
    app = require('server')
  })

  afterEach(()=>{
    server && server.close()
    app=null
    server=null
  })

  it('should success', async ()=>{
    server || (server = app.listen(0))
    const request = supertest(server)
    request().get('path/prefix_home').expect(200)
  })
})

我在运行测试时在config打印了server.js,但打印信息显示jest.mock无效(lib/config的路径正确)。

任何人都知道在这种情况下使用Supertest嘲笑config.js

1 个答案:

答案 0 :(得分:1)

Jest似乎解析路径,因此您在模拟时提供的路径必须保持一致:如果./lib/config位于server.test.js旁边,则应为server.js。如果文件位于不同的位置,则需要相应地构造路径,例如 ../src/lib/config 如果你的server.js在src文件夹中,server.test.js位于src旁边的test文件夹中