2017-11-24 16 views
0

awaitasyncを使用してJestを使用しているコードをテストしようとしています。私が持っている問題は、例外がスローされますが、Jestはそれをキャッチしていないようです。非同期/待機メソッドのテスト。ユニットテストでJestが例外を捕捉しない

たとえば、ここにsession.urlが存在するかどうかを確認する方法は、runです。ない場合は、例外がスローされます。

ここ
const args = require('args'); 
const fs = require('fs'); 
const { promisify } = require('util'); 

const readFile = promisify(fs.readFile); 

// Loads JSON configuration file 
module.exports.loadConfigFile = async (filename) => { 
    const contents = await readFile(filename, 'utf8'); 
    return JSON.parse(contents); 
}; 

// Prepare session ensuring command line flags override config 
module.exports.prepareSession = async (flags) => { 
    if(!flags.config) return flags; 
    const config = await this.loadConfigFile(flags.config); 
    return {...config, ...flags}; 
}; 

// Runs the race application 
module.exports.run = async (flags = {}) => { 
    const session = await this.prepareSession(flags); 
    if(!session.url) throw new Error('A valid URL is required'); 
}; 

私は例外がスローされたかどうかをテスト:テストの実行

describe('Race Module',() => { 
    test('Throws exception if no URL is provided', async() => { 
    const runner = await race.run(); 
    expect(runner).toThrowError(); 
    }); 

    ... 

、例外がスローされますが、冗談はそれをキャッチしていない表示されますそれは合格しません:

Race Module 
    ✕ Throws exception if no URL is provided (3ms) 

● Race Module › Throws exception if no URL is provided 

A valid URL is required 

    at Object.<anonymous>.module.exports.run (src/race.js:23:27) 
     at <anonymous> 

私は間違っていますか?

私の初期の考えは、catch(() => {})race.run()にチェーンすることでしたが、私はそれをどのようにテストするのか完全にはわかりません。それは問題ではないかもしれません。

+1

'await'は' run() 'が返す約束事から例外をスローします。 'runner'は約束の結果(非同期関数の' return'値)です。 – Bergi

+0

Ahhhh!私は今参照してください。ありがとうございました。 – BugHunterUK

答えて

1

修正はrejects.toThrowを使用していました。ただし、この機能は現在マスタで機能していません。私はベータブランチを使用しなければならなかった。ここをクリックしてください:https://github.com/facebook/jest/pull/4884

test('Throws exception if no URL is provided', async() => { 
    await expect(race.run()) 
     .rejects 
     .toThrow('A valid URL is required'); 
}); 
関連する問題