2017-08-28 66 views
1

伙计!如何通过使用笑话来模拟超级模块?

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

这里是我的server.js

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

我想嘲笑config.js,而我用Supertest,这里是我的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) 
    }) 
}) 

我已经印在server.jsconfig运行测试一段时间,但打印信息表明jest.mock没有工作(路径lib/config是正确的)。

任何人有任何想法嘲笑config.js在这种情况下使用Supertest?

+0

在'server.js',你需要'/ lib目录/ config'并在测试' lib/config',这不是严格的相等字符串。问题可能在这里 – Fefux

回答

1

Jest似乎可以解析路径,因此您在嘲笑时提供的路径必须一致:如果server.test.js位于server.js旁边,则应为./lib/config。如果文件位于不同的地方,则需要相应地构建路径,例如 ../src/lib/config 如果您server.js是src文件夹并server.test.js位于下一个测试文件夹SRC