这怎么可能?东西应该被印出来,但它们不会

时间:2019-06-30 18:44:29

标签: javascript node.js typescript jasmine postman

我不明白console.logs如何不打印。

list3 = []
for i in range(len(list1)):
    list3.append([f"result line{i+1} from list1", list2_dict[list1[i][0]] * list2_dict[list1[i][1]] * list2_dict[list1[i][2]])

这些都没有打印:

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

实际打印的是:
已开始
规格已执行
你好
在getTable之后
.afterall

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

2 个答案:

答案 0 :(得分:0)

您快到了,但是对done()的呼叫不在正确的位置。测试将运行,启动Promise,然后在诺言有机会解决或拒绝之前立即通知它done()

尝试将done()移动到thencatch块内:

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

答案 1 :(得分:0)

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,这将返回一个Promise。然后安排一些承诺在(如果)承诺解决时要做。然后调用done(),从而结束测试。由于测试已结束,因此不会发生getTable中的异步操作,也不会发生.then回调。

相反,您需要等到getTable的promise完成解析后再完成测试。另外,由于您已经在异步函数中,因此不需要使用.then回调,也不需要使用done(),因为茉莉花知道要等到异步函数的诺言完成。例如:

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