У меня есть несколько тестов, созданных с mocha
и chai
с использованием TypeScript
, они на самом деле работают, как и ожидалось. Каждая функция возвращает Promise
, который выполняет test
.
У меня вопрос: есть ли в любом случае значение для каждого test
значения, возвращенного предыдущим test
без использования вложенности, которую вы видите ниже.
Меня беспокоит то, что если у меня будет больше test
, то код вложения может быть очень раздражающим, если идти вправо
import * as request from 'supertest';
import app from '../src/app';
import { Promise } from 'bluebird';
import * as dateformat from 'dateformat';
import Commons from '../../utils/commons';
import { expect } from 'chai';
...
// all the functions used below are defined over here
...
registerNonExistingUser(email, pass, role).then(
(jwtToken: string) => {
authenticateUserCorrectJwt(jwtToken).then(
(user) => {
authenticateUserWrongJwt().then(
() => {
loginUserWrongCredentials().then(
() => {
loginUserCorrectCredentials(email, pass).then(
(jwtToken: string) => {
getLocalUserInfoCorrectJwt(jwtToken, email).then(
(user) => {
createTodoAsEditor(jwtToken, todoTitle).then(
(todos) => {
checkTodoExistsWithCorrectTitle(jwtToken, todoTitle).then(
(todo: any) => {
deleteTodoWithCorrectIdAsEditor(jwtToken, todo._id).then(
(todo) => {
unregisterExistingUser({
'local.email': email,
}).then(
(user) => {
// console.log(Commons.stringify(user));
}
);
}
);
}
);
}
);
}
);
}
);
}
);
}
);
}
);
}
);
Есть идеи, как это украсить?
[ПРАВИТЬ 1]
@ bhoo-day предложение сработало:
registerNonExistingUser(email, pass, role)
.then((_jwtToken: string) => {
return authenticateUserCorrectJwt(_jwtToken);
})
.then((user) => {
return authenticateUserWrongJwt();
})
...
Теперь мне интересно, смогу ли я преобразовать начало цепочки, чтобы получить что-то вроде следующего (что я пробовал, но не работает). Моя цель - поставить все функции на одном уровне, включая самую первую функцию:
Promise.resolve()
.then(() => {
return registerNonExistingUser(email, pass, role);
})
.then((jwtToken: string) => {
return authenticateUserCorrectJwt(jwtToken);
})
.then((user) => {
return authenticateUserWrongJwt();
})
...
[РЕДАКТИРОВАТЬ 2]
Я попробовал следующее, и это работает. Есть ли у вас какие-либо идеи о том, как это упростить? Может быть, с помощью: Promise.resolve()...
?
new Promise((resolve) => {
it('dummy', (done) => { resolve(); return done(); });
})
.then(() => {
return registerNonExistingUser(email, pass, role);
})
.then((_jwtToken: string) => {
return authenticateUserCorrectJwt(_jwtToken);
})
Спасибо!