首页 > 解决方案 > 这怎么可能?东西应该被打印出来,但他们没有

问题描述

我不明白如何不打印 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);

实际打印的是:
Started
spec 在 getTable .afterall 之后执行
hello

请帮助我了解发生了什么!我用邮递员测试了它,服务器工作正常。我希望该请求将返回与邮递员相同的结果。

标签: javascriptnode.jstypescriptjasminepostman

解决方案


你快到了,但你的电话done()不在正确的地方。测试将运行,启动Promise然后立即通知它是done()在承诺有机会解决或拒绝之前。

尝试将done()to 移到thenandcatch块中:

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)
  });
});

推荐阅读