2017-08-28 11 views
1

みんな!jestを使ってsupertestでモジュールをモックする方法は?

JestとSupertestを使用してノードサーバーコードをテストしています。ここで

がある私の server.js

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

私はここに私の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を印刷しているが、印刷情報がある、私はSupertestを使用しながら、config.jsをモックとしたいですjest.mockが機能しないことを示しています(パスはlib/configです)。

このような状況では、誰でもSupertestを使用してconfig.jsを嘲笑する考えはありますか?

+0

をSRCに次のテストフォルダにある、あなたは'必要な場合。/ libに/ config'をし、あなたのテストで ' lib/config'であり、それは厳密に等しい文字列ではありません。問題はここにある可能性があります – Fefux

答えて

1

Jestがパスを解決するように見えるので、模擬しながら提供するパスは一貫していなければなりません。がserver.jsの隣にある場合は./lib/configになります。ファイルが別の場所にある場合は、それに応じてパスを構築する必要があります。 ../src/lib/config あなたserver.jsは、srcフォルダにあり、server.test.jsがserver.js` `で

関連する問題