Chcę napisać kilka testów jednostkowych z żartem i mangustą, aby potwierdzić interakcję danych z mongo.Limit czasu przy próbie połączenia z mongo z testów jednostkowych
Nie chcę drwić z mangusty, ponieważ chcę walidować sposób, w jaki dokumenty mongo zostały utworzone/zmodyfikowane/przetworzone.
package.json
jest skonfigurowany tak, aby pozostawić modułów węzła unmocked:
{
"jest": {
"unmockedModulePathPatterns": [
"node_modules"
]
}
}
W moim teście, mam założyć beforeAll()
hak, aby zadbać o podłączenie do Mongo:
const mongoose = require('mongoose');
describe('MyTest',() => {
beforeAll((done) => {
mongoose.connect('mongodb://127.0.0.1:27017/test');
let db = mongoose.connection;
db.on('error', (err) => {
done.fail(err);
});
db.once('open',() => {
done();
});
});
it('has some property',() => {
// should pass but actually never gets run
expect(1).toBe(1);
});
});
Oto wyjście :
/usr/local/bin/node node_modules/jest-cli/bin/jest.js --verbose
Using Jest CLI v0.10.0, jasmine2
FAIL src/lib/controllers/my-controller/__tests__/my-test.js (5.403s)
MyTest
✕ it has some property
MyTest › it has some property
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timer.listOnTimeout (timers.js:92:15)
1 test failed, 0 tests passed (1 total in 1 test suite, run time 5.903s)
Process finished with exit code 1
Czas testu za każdym razem ponieważ done()
nigdy nie jest wywoływany w hakcie beforeAll()
- nie są zgłaszane żadne błędy ani nic nie jest drukowane na konsoli. Umieszczę punkty przerwania w haku beforeAll()
w celu sprawdzenia, czy kod jest uruchamiany. Wygląda na to, że mangusta wisi podczas próby otwarcia połączenia z Mongo, a potem kończy się limit czasu.
Gdy uruchamiam podobny kod poza środowiskiem żartu, łączy się on zgodnie z oczekiwaniami (prawie natychmiast). Podejrzewając, że może to być przyczyną problemów, eksperymentowałem z wyłączaniem funkcji automockiego żartu, ale zachowanie pozostaje niezmienione.
Wyobrażam sobie, że przegapiłem coś niesamowicie oczywistego ... jakiekolwiek pomysły, co może się dziać? ,.
- JEST-cli V 0.10.0
- gambianus V 4.4.11
Aktualizacje:
- Próbowano zastępując ES6 składni funkcji strzałka zwykły
function(done) {}
. Bez różnicy. - Próbowałem dokonać testu asynchronicznego, przekazując parametr
done
i wywołując go przy zakończeniu testu. Bez różnicy. - Próbowaliśmy dzwonić
mongoose.connect()
po ogłoszeniuerror
iconnected
obsługi zdarzeń - próbowali zakomentowanie cały kod związany Mongoose, aby sprawdzić, czy hak
beforeAll()
działa poprawnie - to jest.
Trochę długie ujęcie, ale spróbować użyć funkcji (zrobione) zamiast strzałki Składnia ES6? Istnieją pewne subtelne różnice. –
możesz spróbować poniżej? to '('ma pewną właściwość', (zrobione) => { // powinien przejść, ale w rzeczywistości nigdy się nie uruchomić spodziewać (1) .toBe (1); done(); });' –
Dzięki - wypróbowałem obie sugestie bez skutku, dodam do mojego opisu. – jayp