Как это возможно? Вещи должны быть напечатаны, но они не - PullRequest
0 голосов
/ 30 июня 2019

Я не понимаю, как не печатается файл console.logs.

import { GenericRepository, getGenericRepository } from '../src/database/repository/GenericRepository';
import { start, stop } from '../src/index';
import request from 'request';

const baseUrl = 'http://localhost:3200/';

const getTable = async (tableName: string) => {
  const data = {
    'tableName': 'tableName'
  };

  const header = {
    url: baseUrl + 'table',
    method: 'POST',
    json: true
  };

  console.log('hello');
  request.post({
    url: 'http://localhost:3200/getTable',
    body: data,
    json: true
  }, (error, response, body) => {
    console.log('getting angry');
    if (error) {
      console.error('error: ', error);
    } else {
      console.log(response);
    }
  });

  await new Promise((resolve, reject) => {
    request.post({
      url: 'http://localhost:3200/getTable',
      json: data
    }, (error, response, body) => {
      console.log('getting angry');
      if (error) {
        console.error('error: ', error);
        reject(error);
      } else {
        console.log(response);
        resolve('response' + response);
      }
    });
  })


}

describe('A suite', function () {
  beforeAll(async done => {
    // await start()f.catch(error => { console.log(error); });
    done();
  });

  afterAll(() => {
    console.log('afterall')
  });

  it('contains spec with an expectation', async done => {
    console.log('spec executed')

    getTable('supply').then(result => {
      console.log('result: ', result)
    }).catch(error => {
      console.log('error', error);
    });


    console.log('after getTable')

    done();
    // expect(table.length).toBeGreaterThan(0);
  });
});

Ни один из них не печатается:

 console.log('getting angry');
 console.error('error: ', error);
 console.log(response);
 console.log('result: ', result);
 console.log('result: ', result);
 console.log(response);

на самом деле печатается:
Начало
спецификация выполнена
привет
после getTable
.afterall

Пожалуйста, помогите мне понять, что происходит! Я проверил это с почтальоном, сервер работает нормально. Я ожидаю, что запрос вернет тот же результат, что и почтальон.

Ответы [ 2 ]

0 голосов
/ 30 июня 2019
it('contains spec with an expectation', async done => {
  console.log('spec executed')

  getTable('supply').then(result => {
    console.log('result: ', result)
  }).catch(error => {
    console.log('error', error);
  });

  console.log('after getTable')

  done();
  // expect(table.length).toBeGreaterThan(0);
});

Этот код говорит синхронно выполнять все следующее: Вызовите getTable, который возвращает обещание. Затем наметьте некоторые вещи, которые будут выполнены, когда (если) это обещание разрешится. Затем вызовите done (), завершив тестирование. Поскольку тест завершен, асинхронных операций в getTable не происходит, равно как и обратных вызовов .then.

Вместо этого вам нужно дождаться разрешения обещания getTable, прежде чем завершить тест. Кроме того, поскольку вы уже находитесь в асинхронной функции, вам не нужно использовать .then обратные вызовы и не нужно использовать done(), так как jasmine знает, что нужно дождаться завершения обещания асинхронной функции. Например:

it('contains spec with an expectation', async () => {
  console.log('spec executed')

  try {
    const result = await getTable('supply')
    console.log('result: ', result)
  } catch (error) {
    console.log('error', error);
  }

  console.log('after getTable')
});
0 голосов
/ 30 июня 2019

Вы почти на месте, но ваш звонок на done() не в нужном месте.Тест запустится, запустите Promise, а затем сразу же сообщите, что оно done(), прежде чем обещание получит шанс выполнить или отклонить.

Попробуйте переместить done() в пределах then и catch блоков:

it('contains spec with an expectation', async done => {

  getTable('supply').then(result => {
    console.log('result: ', result)
    done()
  }).catch(error => {
    console.log('error', error)
    done.fail(error)
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...