使用VelocityJS解析VTL时如何修复“ JSON中的意外令牌$”

时间:2019-08-12 17:44:25

标签: javascript aws-appsync 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" } }

1 个答案:

答案 0 :(得分:1)

我认为,解析问题的原因是util和ctx / context都是AppSync概念,而不是VTL概念。当您使用第三方库时,他们不知道这意味着什么,因此无法替换它们。

您可能会发现Amplify的新模拟和测试工具很有用:https://aws-amplify.github.io/docs/cli-toolchain/quickstart?sdk=js#mocking-and-testing

还有其他第三方库可以很好地涵盖AppSync本地开发,如果上面的内容不适合您的用例,则值得查阅。