История и мотивация:
У нас есть довольно обширная сквозная тестовая кодовая страница Protractor. Иногда бывает, что тест ждет конкретного исправления, которое будет реализовано - как правило, в рамках подхода TDD и для демонстрации того, как проблема воспроизводится и каково предполагаемое поведение. В настоящее время мы используем Jasmine pending()
с номером проблемы Jira внутри. Пример:
pending("Missing functionality (AP-1234)", function () {
// some testing is done here
});
Теперь мы хотели бы знать, когда мы можем переименовать pending()
обратно в it()
и запустить тест. Или, другими словами, когда проблема AP-1234
разрешена или отправляется на тестирование.
Текущий подход:
В настоящий момент я пытаюсь решить его с помощью пользовательского правила ESLint
, jira
Модуль NodeJS и Q
. Пользовательское правило ESLint
выполняет поиск вызовов pending()
с хотя бы одним аргументом. Извлекает номера билетов в формате AP-
, а затем 4 цифры и использует jira.findIssue()
, чтобы проверить его статус в Jira. Если статус Resolved
- сообщить об ошибке.
Вот что я получил до сих пор:
"use strict";
var JiraApi = require("jira").JiraApi,
Q = require('q');
var jira = new JiraApi("https",
"jira.url.com",
"443",
"user",
"password",
"2");
module.exports = function (context) {
var jiraTicketRegex = /AP\-\d+/g;
return {
CallExpression: function (node) {
if (node.callee.name === "pending" && node.arguments.length > 0) {
var match = node.arguments[0].value.match(jiraTicketRegex);
if (match) {
match.forEach(function(ticket) {
console.log(ticket); // I see the ticket numbers printed
getTicket(ticket).then(function (status) {
console.log(status); // I don't see statuses printed
if (status === "Resolved") {
context.report(node, 'Ticket {{ticket}} is already resolved.', {
ticket: ticket
})
}
});
});
}
}
}
}
};
Где getTicket()
определяется как:
function getTicket(ticket) {
var deferred = Q.defer();
jira.findIssue(ticket, function(error, issue) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(issue.fields.status.name);
}
});
return deferred.promise;
}
Проблема: в настоящее время она успешно извлекает номера билетов из вызовов pending()
, но не печатает статусы билетов. Ошибок нет.
Вопрос:
Общим вопросом является, я думаю, следующее: могу ли я использовать асинхронные блоки кода, ждать ответных запросов, разрешать promises в пользовательских правилах ESLint
? И, если нет, каковы мои варианты?
Более конкретный вопрос: что я делаю неправильно и как я могу использовать модуль Node.js jira
с ESLint
?
Поблагодарили бы любые идеи или альтернативные подходы.