2014-09-16 12 views
8

Prowadzimy nasze testy jednostkowe Jasmine przy użyciu kombinacji Karma i PhantomJS na serwerze kompilacji. Uruchomienie testów lokalnie w Chrome działa dobrze, błąd nie występuje tam (co jest innym pytaniem). Oto co się dzieje:PhantomJS kończy działanie po błędzie składni podczas wykonywania testów jednostkowych.

W pewnym momencie w wykonaniu, test wpada w „nieokreślonej” błąd i po prostu zatrzymuje:

PhantomJS 1.9.7 (Mac OS X) ERROR 
    TypeError: 'undefined' is not an object (evaluating 'dropScope.resize') 
    at /Users/nwinkler/workspaces/.../foo.js:250 
PhantomJS 1.9.7 (Mac OS X): Executed 654 of 1221 ERROR (14.512 secs/14.386 secs) 
DEBUG [karma]: Run complete, exitting. 
DEBUG [launcher]: Disconnecting all browsers 

Nawet gdy uruchomiony karmę z flagą --force, to nadal wychodzi w tym momencie .

Czy istnieje sposób, aby Karma/PhantomJS kontynuował testy bez zatrzymywania się w tym momencie? Dlaczego PhantomJS nie może naprawić tego błędu?

Nie szukam rozwiązania dla błędu undefined, to inny temat - chciałbym tylko zrozumieć, dlaczego PhantomJS i Karma wychodzą z tego miejsca i nie kontynuują pozostałych testów jednostkowych.

+0

Czekam na odpowiedź na to jedno również. .. –

+0

Tak dzieje się z moim pakietem również niezależnie od przeglądarki. Próbuję przetestować CKEditor i w naszych testach tworzymy edytor manekina, który powoduje błędy js, ale kiedy próbujesz potwierdzić na jakiejś domenie, błędy js powodują, że Karma zatrzymuje testowanie. – branchgabriel

+1

Aktualizacja: Kiedy nasz pakiet przechodzi od ponad 800 do ponad 1000 testów, te błędy wydają się układać w stosy i powodują wyłączenie. Odkryłem, że zmiana kolejności ładowania w tablicy plików pomaga, ale uniemożliwia nam używanie globów do testów. Karma powinna tylko polegać na twierdzeniu, że nie popełnia błędów. – branchgabriel

Odpowiedz

0

Zwykle używam tego kodu, aby ostrzec o błędach i wznowić run (phantomjs)

phantom.onError = function(msg, trace) { 
    var msgStack = ['PHANTOM ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
    //phantom.exit(1); // do not stop 
}; 

jeśli używasz obiekt strony:

page.onError = function(msg, trace) { 
    // never display errors 
    var msgStack = ['SITE ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
} 
+0

Gdzie umieszczasz ten kod w swojej konfiguracji? W pliku konfiguracyjnym Karmy lub w niestandardowym pliku kodu dołączonym do testów? – nwinkler

+0

Ten kod umieszczam tuż nad pierwszym testem w pliku kodu. – Eun

+0

@Eun Ten kod nie wywarł na mnie żadnego efektu. Próbowałem dodać go na początek mojego pierwszego testu, także w kodzie phantom launchera. Bez efektu. Czy możesz dokładniej określić, gdzie to musi się udać. Jaką wersję phantom używasz, aby to działało? Nie mogę znaleźć funkcji onError, która ma być nadpisywana w phantomjs.js. – branchgabriel

Powiązane problemy