我不明白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
请帮助我了解发生了什么! 我用邮递员测试了服务器是否正常工作。 我希望该请求将返回与邮递员相同的结果。
答案 0 :(得分:0)
您快到了,但是对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)
});
});
答案 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')
});