TRAVIS-CI 노드 빌드가 무작위로 실패합니다
-
21-12-2019 - |
문제
하나의 노드 모듈 에 문제가 있습니다 다른 상자 및 Travis-CI에서 로컬로 작업하고 있지만 때로는 시간 초과로 인한 것으로 인해 하나의 단일 테스트가 Travis-CI . 시험은 적어도 최소한 나에게 결정적이므로 무작위로 실패해서는 안됩니다.
이 부분에 문제를 추적했습니다 :
function record(rec_options) {
// Originaly the parameter was a dont_print boolean flag.
// To keep the existing code compatible we take that case into account.
var typeof_rec_options = typeof(rec_options);
var dont_print = (typeof_rec_options === 'boolean' && rec_options)
|| (typeof_rec_options === 'object' && rec_options.dont_print);
var output_objects = typeof_rec_options === 'object' && rec_options.output_objects;
...
var out = !output_objects ?
generateRequestAndResponse(body, options, res, datas) :
generateRequestAndResponseObject(body, options, res, datas);
.
rec_options
인 { dont_print: true, output_objects: true }
의 값은 var output_objects
가 false
로 평가됩니다 (다시 만 ). 함수가 문자열을 출력하고 테스트가 올바르게 객체가 아닌 객체가 아닌 객체가 아닙니다. 문자열을 덤프하는 빌드 에서 플래그 평가가 실패 할 수있는 증거를 볼 수 있습니다. 객체 대신 (RefectaCodicetag 코드가 지정 될 때마다 오브젝트가 객체임을 확인하고 output_objects
가 예상되는 string
를 보여주는 테스트가 있습니다.
나에 따르면 이것은 결코 일어나지 않아야하며, object
는 모호하게 정의되지 않으며 확실히 무작위로 정의되지 않습니다. 그러나 이것은 정확히 시간 이후 일이 일어나는 일입니다.
무엇을 잘못하고 있습니까?
해결책
문제는 그 비동기 호출을 마무리하기 전에 마무리 할 때까지 기다리지 않는 단위 테스트 중 하나에있었습니다.그런 다음 다른 테스트를 실행하여 타이밍에 따라 간섭합니다.이것은 http / https 요청과따라서 후속 테스트는 때로는 결함이있는 테스트에서 비동기 요청을 캡처 할 수 있습니다.