【发布时间】:2023-03-13 02:47:01
【问题描述】:
我有许多异步函数,我从文件中导入 json,然后设置字段。我等待导入 json。早些时候,它通过等待 json 然后操作数据来顺序执行。我以前使用 Mocha,最近开始迁移到 Jest,那时我的所有测试和功能都开始出现问题。
我不确定我是否正确理解了异步函数。但它以前工作得很好,现在不行了。下面是例子:
async build_transaction_request({reference=util.id_generator(), type="XYZ", amount=25, currency="USD", timestamp=util.timestamp_millis()}={}){
let transactions = await config_util.get_payload("transactions")
let x_transaction = transactions.xTransaction
x_transaction.reference = reference
x_transaction.type = type
x_transaction.amount = amount
x_transaction.currency = currency
x_transaction.timestamp = timestamp
return x_transaction
}
我得到这个错误:
TypeError:无法设置未定义的属性“引用”
下面是另外两个函数:
async load_data(file_path) {
await delete require.cache[require.resolve(file_path)]
let data = await require(file_path);
return data
}
async get_payload(file_name) {
let payload = await this.load_data(this.root_dir + '/resources/payload/' + file_name + ".json")
return payload
}
以下是我的测试中调用 build_transaction_request 函数的代码:
test('Test xyz returns 201', async() => {
//......some code.....
var[instruction, x_transaction, token] = await Promise.all([
helper.build_instruction_request({
type: "CURRENCY",
value: value,
rate: rate
}),
helper.build_transaction_request({
amount: amount
}),
helper.build_token_request(token_id)
]);
});
【问题讨论】:
-
get_payload是否返回一个 Promise 对象?其次,你确定这个transactions.xTransaction不会返回 undefined 吗? -
对于初学者来说,您有没有在
console.log(transactions);中查看该对象的实际外观? -
@Pointy - 如果我运行一个测试,一切正常。但是如果运行测试套件,测试开始失败并且 console.log(transactions);打印未定义。
-
那么听起来你可能想看看
config_util.get_payload()在做什么。 -
@Ele - 是的,get_payload 也是一个异步函数,所以如果我没有错,它应该返回一个承诺。我已经编辑了描述并添加了这两个功能。
标签: javascript node.js async-await jestjs