同一EJS文件内调用函数时Mountebank报invalid injection错误如何解决
报错原因
你遇到的invalid injection错误由两个问题导致:
- Mountebank的注入函数运行时会被包裹为立即执行函数,在主注入函数外单独定义
sleep函数不符合语法要求,解析时会抛出「Unexpected token function」错误 await this.sleep(1000)中的this指向错误,运行时sleep方法没有被绑定到this对象上
解决方案
方案1:修正注入代码
把sleep函数定义到主注入函数内部,直接调用即可,修正后代码如下:
async function (request, state, logger) { // sleep函数移到内部定义 function sleep(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } var fs = require('fs'); var path = require('path'); var RspFilename = "my-success.xml"; var responsepath = path.join('ConfigFiles', 'Responses', 'ABS', RspFilename); var response = fs.readFileSync(responsepath, 'utf8'); logger.info("---------Response Sent Successfully--------" + RspFilename + response); // 去掉this直接调用sleep await sleep(1000); return { headers: { "HTTP-Response-Code": 200, "HTTP-Response-Code-Text": "OK", "Content-Type": "text/xml" }, "statusCode": 200, body: response }; }
方案2:使用原生wait行为(更推荐)
原生wait行为无需额外写注入代码,稳定性更高,之前未生效大概率是配置位置错误,需要把wait配置放到对应响应的behaviors字段层级,不要写到响应内容内部,配置示例如下:
{ "port": 8080, "protocol": "http", "stubs": [ { "responses": [ { "is": { "statusCode": 200, "headers": { "Content-Type": "text/xml" }, "body": "这里可以直接写响应内容,也可以配合inject读取外部文件" }, // wait配置在behaviors层级,和is平级 "behaviors": [ { "wait": 1000 } ] } ] } ] }
内容的提问来源于stack exchange,提问作者Shabar
相关产品推荐
相关产品推荐

