我们如何对 AWS CDK 代码进行单元测试?我们应该吗?

fro*_*roi 7 amazon-web-services aws-cloudformation aws-cdk

根据我看到的示例,代码断言是预期的 json cf 模板与 cdk 合成器生成的模板。

我们如何设置预期的 json cf 模板?

  • 如果我们手动创建它,那就违背了使用 cdk 的目的。
  • 如果我们只是复制粘贴 cdk 合成器的输出,那就违背了单元测试的目的。

话虽如此,对 CDK 代码进行单元测试是否有目的?也许我在这里错过了这个想法。请务必指出。

小智 7

aws-cdk有一个测试实用程序库,可用于对堆栈进行断言。cdk repo 使用它本身进行许多自己的单元测试。

https://www.npmjs.com/package/@aws-cdk/assert

这允许你做类似的事情

// jest
test('configurable retention period cannot exceed 14 days', () => {
  const stack = new MyStack();
  expect(stack).to(haveResource('AWS::SomeService::SomeResource', {
    SomePropertyOnResource: 'some-value-it-should-have'
  }));
});
Run Code Online (Sandbox Code Playgroud)

目前仅支持使用 typescript 编写的 CDK 应用程序,但计划最终支持 cdk 支持的所有语言。

您是否应该这样做通常类似于询问您是否应该对任何代码库进行单元测试。如果你有很多复杂的业务逻辑发生,比如有条件地创建资源或以其他方式改变你的应用程序行为,那么可能值得在这些地方得到一些报道。如果您的应用程序本质上是一堆没有条件、循环等的静态声明,也许您可​​以cdk diff在进行更改时运行并手动验证您的预期更改。

如果您正在编写用于在不同 cdk 应用程序中重用的自定义构造,那么对它们进行单元测试可能是一个好主意。

一些相关文档 https://docs.aws.amazon.com/cdk/latest/guide/testing.html