Express. js, Jest, Supertest, Handlebars .. js - визуализировать шаблон, попытаться получить доступ к переменным res.body для теста - PullRequest
0 голосов
/ 17 апреля 2020

Тест с помощью jest / supertest для просмотра переменных тела res.render (handlebars. js)

Я пытаюсь запустить тест сайта, просматривая массив URL-адресов и выполните простой тест, чтобы проверить наличие «заголовка страницы», я использую: Express. js: Jest: Supertest и Handlebars. js,

У меня есть тест, который зацикливается массив URL-адресов, и я хотел бы сделать тест "URL-адресов" для определенного допустимого "заголовка страницы".

Проблема Я не могу получить доступ к переменной pagetitle / любой другой переменные. Тест работает и регистрирует маршрутизацию express как код 200. Я протестировал с помощью res.send на примере JSON

{name :"john"} 

Это работает и возвращает res.body json объект. При вызове переменных через браузер localhost переменная успешно возвращается.

Я проверил это различными способами и подозреваю, что это как-то связано с res.render, удаляющим res.body / res.locals из маршрутизация. Либо res.render, либо, возможно, тесты не ожидают успешного возврата с помощью функции asyn c, но я не знаю, как объединить это, если это проблема. Маршрут res.render, возвращаемый через тест, также связывает тестовый res.text с возвращенным шаблоном, что, как мне кажется, исключает проблему c.

Это может быть связано с bodyparser, Настройка порта или сервера, однако это было исследовано, исключая фундаментальное недопонимание функциональности супер-теста.

В принципе, супер-тест запускает сервер, тест инициируется и проходит, повторяя код 200, однако переменные в возвращаемой маршрутизации отсутствуют.

Большое количество консольных журналов должно отображать различные элементы, с которыми встречаются.

Пакет. json

  "scripts": {
    "test:watch": "jest  --detectOpenHandles  --watchAll --maxWorkers=1"
  },

Express Маршрутизация

 exports.introduction = function(req, res) {
  console.log(res.locals.mybody)
  res.render(directory+'introduction',{
    pagetitle: 'Introduction | '+sitename+'',
    siteName : sitename,
  })
}; 

Тестовый файл

const request = require('supertest');
const express = require('express');
const app = require('../index.js')
app.set('port', process.env.PORT || 3001);
var siteIndex = [{
  url: '/introduction',
  lastMod: new Date('2000-02-02'),
  changeFreq: 'weekly',
  requireslogin : false
}]

Ошибка на консоли

 FAIL  tests/fraternateendpoint.test.js

console.log index.js:119
  [Object: null prototype] { mybody: 'pass a variable' }
console.log node_modules/fraternate/controllers/fraternatepages.js:53
  pass a variable
console.log tests/fraternateendpoint.test.js:115
  This is empty {}
console.log tests/fraternateendpoint.test.js:116
  This is undefined undefined
console.log tests/fraternateendpoint.test.js:117
  This is undefined undefined
console.log tests/fraternateendpoint.test.js:118
  This is undefined undefined
console.log tests/fraternateendpoint.test.js:119
  This is undefined undefined
console.log tests/fraternateendpoint.test.js:120
  This is empty undefined
console.log tests/fraternateendpoint.test.js:121
  This is empty undefined   end point testing of sitemap › given "/introduction" endpoint should return a 200, and a pagetitle should exist.

TypeError: Cannot read property 'mybody' of undefined

  120 |               console.log('This is empty',res.body.mybody)
  121 |               console.log('This is empty',res.mybody)
> 122 |               console.log('This is undefined',res.locals.mybody)
      |                                                          ^
  123 |               console.log('This is undefined',res.req.locals.mybody)
  124 |               console.log('This is undefined',res.res.locals.mybody)
  125 |               console.log('This is undefined',res.exphbs.mybody)

  at Test.<anonymous> (tests/fraternateendpoint.test.js:122:58)
  at Test.assert (node_modules/supertest/lib/test.js:181:6)
  at Server.localAssert (node_modules/supertest/lib/test.js:131:12)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...