使用VelocityJS解析VTL时如何修复"Unexpected token $ in JSON"
How to fix "Unexpected token $ in JSON" when using VelocityJS to parse VTL
为了为我的 AppSync 解析器编写单元测试,我使用 VelocityJS 包来解析我的 sam 模板内的 VTL。但是,VTL 模板未被完全解析。
代码在 AWS 上运行良好,是单元测试出错了。
https://github.com/shepherdwind/velocity.js
#if($util.isNullOrBlank($ctx.result.themePreferences))
#set($themePreverences = {})
$util.qr($themePreverences.put("darkMode", "DEFAULT"))
$util.qr($ctx.result.put("themePreferences", $themePreverences))
#end
$util.toJson($ctx.result)
当使用 let result = Velocity.parse(template, ctx);
时,结果是字符串 "$util.toJson($ctx.result)"
而不是 $ctx.result
的 JSON 值。
IE:
{ "themePreferences": { "darkMode": "DEFAULT" } }
我认为解析问题的原因是 util 和 ctx/context 都是 AppSync 概念,而不是 VTL 概念。由于您使用的是第三方库,他们不知道这意味着什么,也无法替换它们。
您可能会发现 Amplify 的新模拟和测试工具很有用:https://aws-amplify.github.io/docs/cli-toolchain/quickstart?sdk=js#mocking-and-testing
还有其他第三方库可以很好地涵盖 AppSync 本地开发,如果上述不适合您的用例,值得一试。
为了为我的 AppSync 解析器编写单元测试,我使用 VelocityJS 包来解析我的 sam 模板内的 VTL。但是,VTL 模板未被完全解析。
代码在 AWS 上运行良好,是单元测试出错了。 https://github.com/shepherdwind/velocity.js
#if($util.isNullOrBlank($ctx.result.themePreferences))
#set($themePreverences = {})
$util.qr($themePreverences.put("darkMode", "DEFAULT"))
$util.qr($ctx.result.put("themePreferences", $themePreverences))
#end
$util.toJson($ctx.result)
当使用 let result = Velocity.parse(template, ctx);
时,结果是字符串 "$util.toJson($ctx.result)"
而不是 $ctx.result
的 JSON 值。
IE:
{ "themePreferences": { "darkMode": "DEFAULT" } }
我认为解析问题的原因是 util 和 ctx/context 都是 AppSync 概念,而不是 VTL 概念。由于您使用的是第三方库,他们不知道这意味着什么,也无法替换它们。
您可能会发现 Amplify 的新模拟和测试工具很有用:https://aws-amplify.github.io/docs/cli-toolchain/quickstart?sdk=js#mocking-and-testing
还有其他第三方库可以很好地涵盖 AppSync 本地开发,如果上述不适合您的用例,值得一试。