JavaScript - динамически компилировать сообщения из набора блоков со слабым API - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать блочное сообщение, содержащее результаты теста e2e, используя Slack's Block kit API.По сути, то, что я пытаюсь динамически построить и отправить, приведено ниже:

{
      "type": "section",
       "text": {
         "type": "mrkdwn",
         "text": "These are the passes ----------------------"
       }
     },
    {
     "type": "section",
      "text": {
       "type": "mrkdwn",
       "text": "someTestFile.spec.js"
     }
   },
   {
   "type": "section",
     "text": {
        "type": "mrkdwn",
        "text": "firstTest"
  }
},

Пока что мои результаты теста загружаются в массив объектов, который выглядит примерно так:

let passResults = [{testname: "firstTest"}, {testname: "secondTest"}];

Этот массив затем отправляется функции преобразования, которая удаляет ключ testname и загружает строку testname в другой массив (список), а также добавляет некоторую другую информацию о файле test (имя файла test +, является ли этопройти или потерпеть неудачу):

function logResults() {
    slack.sendResultsToSlack(transformer("Passes", passResults));
}
// type = result of test: passes or fails
// arr = passResults or failResults
function transformer(type, arr) {
    let list = [];
    for (let i = 0; i < arr.length; i++) {
        list.push(arr[i].title);
    }
    list.unshift(currentTestName);
    list.unshift('These are the ' + type + '----------------------------');

    return list;
}

Затем массив списков отправляется функции, которая собирается создавать сообщения набора блоков Slack, например, или что-то вроде этого ... так как я верю в этовот где мне не удается создать блоки:

function sendResultsToSlack(testResults) {
        const block = createBlocks(testResults);
        const res = web.chat.postMessage({
                channel,
                attachments: [{
                        "blocks": [{
                            block
                        }]
                    }]
                });

            console.log('Message sent: ', res.ts);
        };
function createBlocks(testResults) {
    let blockArr = [];
    let iterator = testResults.entries();
    for (const [key, value] of iterator) {
        blockArr.push(`
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": ${value}
                }
            }
        `)
    }

    console.log(blockArr);

    return blockArr;
}

Когда я пытаюсь отправить это в Slack, я получаю сообщение об ошибке invalid_attachment.Я вроде как ломаю голову над этим, но я предполагаю, что это что-то вытекающее из моей функции createBlocks над этим ... любая помощь / предложения будут оценены.Кроме того, blockArr выглядит так (немного трудно читать, поэтому я заранее извиняюсь) ...

 [ '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": These are the Passes----------------------------\n                }\n            }\n        ',
  '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": account_primary_flows.spec.js\n                }\n            }\n        ',
  '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": Should allow a user to edit their information\n
             }\n            }\n        ',
  '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": Should allow users to search by lastname\n
        }\n            }\n        ',
  '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": Should allow users to search by firstname\n
         }\n            }\n        ',
  '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": Should allow users to search by username\n
        }\n            }\n        ',
  '\n            {\n                "type": "section",\n                "text": {\n                    "type": "mrkdwn",\n                    "text": Should allow users to edit users\n
}\n            }\n        ' ]
[0-0] ["These are the Fails----------------------------","account_primary_flows.spec.js"]
...