根据我看到的示例,代码断言应该是json cf模板,而不是cdk合成器生成的模板。
我们如何设置预期的json cf模板?
话虽如此,对CDK代码进行单元测试是否有目的? 也许我在这里想不通。请指出来。
答案 0 :(得分:6)
aws-cdk
有一个测试实用程序库,可用于对堆栈进行断言。 cdk存储库将其自身用于许多自身的单元测试。
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'
}));
});
到目前为止,仅支持使用打字稿编写的CDK应用程序支持此功能,但计划最终支持cdk支持的所有语言。
通常,是否应该执行此操作类似于询问是否应对任何代码库进行单元测试。如果您发生了很多复杂的业务逻辑,例如有条件地创建资源或以其他方式更改应用程序的行为,那么可能值得在这些地方获得一些介绍。如果您的应用程序本质上是一堆没有条件,循环等的静态声明,也许您可以在进行更改并手动验证预期更改时运行cdk diff
来解决。
如果您要编写用于在不同cdk应用程序中重用的自定义结构,则对它们进行单元测试可能是个好主意。
一些相关文档 https://docs.aws.amazon.com/cdk/latest/guide/testing.html
答案 1 :(得分:0)
我使用的一种方法是创建一个不同的项目,该项目委派使用我期望已创建的资源。
因此,在cdk-init-cluster
项目中,我只是使用cdk
库创建了所有必要的资源。然后,在 DEPLOY 阶段之后,我运行了cdk-init-cluster-test
模块,该模块被委派来填充/查询/使用以前从cdk-init-cluster
创建的资源项目。
这种方法只能帮助一些类型的资源,例如:
测试项目负责:
然后,我删除插入的数据进行测试。如果没有异常发生,则测试通过。