2017-02-01 1 views
1

여러 번 실행하려고하는 일부 AVA 테스트가 있지만 다른 테스트는 실행 중입니다. 예를 들어, 동일한 5 개의 테스트를 실행하려고하지만이 테스트가 다양하게 구조화 된 데이터에 대해 작동하는지 확인하십시오.AVA 테스트는 Mac에서는 작동하지만 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 함수가 확실히 호출되고 있음을 확인할 수는 있지만. 혼란스러운 부분은 그것이 내 맥에 로컬로 전달됩니다. 젠킨스 서버는 리눅스 VM이기 때문에 내가 맥/리눅스 문제에 기울고있는 이유는 확실하지만 확신 할 수는 없다. 심지어 CI 서버에 5 분의 1이 전달되기 때문에 어떤 종류의 경쟁 조건이 될 수 있습니까? 에바의 문서에서

+0

jenkins가 아닌 Linux VM에서 테스트 한 결과 비슷한 문제가 있습니다. 그래서 확실히 리눅스 – user1821149

답변

2

:

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

fs.readdir 비동기, 그래서 실제로 맥 OS에서 작동 놀랐어요,하지만 당신이 경험 한대로,이 문제를 인종 연결됩니다. fs.readdirSync으로 전환하거나 test.before() 후크에서 비동기 작업을 수행 한 다음 t.context을 활용할 것을 제안합니다.

+0

당신은 신입니다. 고맙습니다! – user1821149

관련 문제