Я только что понял, что у всего моего тестового кода есть условие гонки.
Мой шаблон стиля выглядит примерно так:
const myFunc = (callback) => {
return somePromise().then((result) => {
return someOtherPromise();
}).then((result) => {
db.end(() => {
callback();
});
}).catch((err) => {
db.end(() => {
callback(err);
});
});
};
Я тестирую с Jest.Тестовый код выглядит примерно так:
it('should work', (done) => {
// mock stuff
let callback = () => {
expect(...);
done();
};
myFunc(callback);
});
У меня есть десятки функций и тестов, следующих этому шаблону.Последний тест, который я написал, дал мне ошибку соответствия Jest в моем обратном вызове.После многих недоразумений я понял, что первое выполнение обратного вызова вызывает сбой Jest, и выполняется обратный вызов с параметром err, и происходит сбой перед вызовом done () при первом выполнении обратного вызова.
I'mПонимание этого паттерна может быть абсолютно ужасным.Мне удалось преодолеть состояние гонки, выполнив определенные вызовы wait () в определенном порядке, но это никак не получается.
Как я могу убрать здесь потенциальное состояние гонки?
Я готов полностью изменить стиль. Я делаю это.Я знаю, что мой Javascript не особенно хорош, и система все еще находится на ранней стадии разработки.