You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:24:04