2017-02-01 3 views
1

私はいくつかのAVAテストを複数回実行しようとしていますが、異なるモックで実行しています。たとえば、同じ5つのテストを実行したいが、これらのテストはさまざまな構造化されたデータに対して確実に機能するようにする。Macで動作する関数内でAVAテストが呼び出されましたが、Linuxでは動作しません

import test from 'ava'; 
import * as fs from 'fs'; 

let mockSampleEmail; 
let mockDecomposedEmail; 

function readJsonFile(fname) { 
    return JSON.parse(fs.readFileSync(fname).toString()); 
} 

fs.readdir('pre', (err, files) => { 
    files.forEach(file => { 
    if (!file.match(/\.json$/)) { 
     return null; 
    } 
    mockSampleEmail  = readJsonFile("pre/" + file); 
    mockDecomposedEmail = readJsonFile("post/" + file); 
    runEmailDecomposerTests(mockSampleEmail, mockDecomposedEmail, mockRiskyUpdates, file); 
    }) 
}) 

runEmailDecomposerTests機能は次のようになります:

const runEmailDecomposerTests = (mockSampleEmail, mockDecomposedEmail, mockRiskyUpdates, fname) => { 
    test(`(${fname}) Converts the email message received from the websocket into a simple email object`, t => { 
    //Assertions here 
    }) 
} 

を私はテストファイルにモックをインポートすると、次のようになり、それらが出て解析する必要がありますどのようにそれらを比較する方法を考案しました私のディレクトリ構造は次のようになります。

test/ 
--emails/ 
----emailDecomposer.spec.js 
----pre/ 
------sampleEmail.json 
----post/ 
------sampleEmail.json 

このすべては私のMac上でローカルに動作しますが、私は継続的な統合をテストするために、当社のジェンキンスサーバーにそれを押すと、それが失敗しました

✖ No tests found in test/emails/emailDecomposer.spec.js 

runEmailDecomposerTests関数が確実に呼び出されていることは確認できますが、混乱する部分は、それが私のMacにローカルに渡ることです。 jenkinsサーバーはLinux VMですので、私はmac/linuxの問題に傾いていますが、私は確信が持てません。さらに、約5倍の1分の1がCIサーバ上を通過するため、何らかの競合状態になる可能性があります。 AVAのドキュメントから

+0

私はjenkinsではないLinux VMでテストしましたが、同様の問題があります。だから間違いなくlinux – user1821149

答えて

2

You must define all tests synchronously. They can't be defined inside setTimeout , setImmediate , etc.

fs.readdirは非同期であるので、私はそれが実際のMacOS上で動作驚いている、しかし、あなたが経験してきたように、それは問題にレースをリード。 fs.readdirSyncに切り替えるか、test.before()フックで非同期操作を行い、次にt.contextを利用することをお勧めします。

+0

あなたは神だ。ありがとうございました! – user1821149

関連する問題