Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do we do Unit testing for AWS CDK code? And should we?

Based on the examples I see, the code assertions are expected json cf template versus the cdk synth generated template.

How do we setup expected json cf template?

  • If we manually create it, that defeats the purpose of using cdk.
  • If we just copy paste the cdk synth output, that defeats the purpose of unit testing it.

Having said that, is there a purpose on having unit tests for CDK code? Maybe I'm missing the idea here. Please do point it out.

like image 594
froi Avatar asked Jun 24 '26 06:06

froi


1 Answers

aws-cdk has a library of testing utilities that are useful for asserting against stacks. The cdk repo uses it itself for a lot of its own unit tests.

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

This allows you to do something like

// 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'
  }));
});

This is only supported for CDK apps written in typescript as of now, but the plan is to eventually support all languages cdk supports.

Whether or not you should do this usually is similar to asking whether you should unit test any codebase. If you have a lot of complex business logic happening that does things like conditionally creating resources or otherwise changing your apps behavior, its probably worth getting some coverage in those places. If your app is essentially a bunch of static declarations without conditionals, loops, etc, maybe you can get by with just running cdk diff when making changes and manually verifying your expected changes.

If you're writing custom constructs for reusing in different cdk apps, unit testing those is probably a good idea.

Some relevant docs https://docs.aws.amazon.com/cdk/latest/guide/testing.html

like image 186
Mitchell Valine Avatar answered Jun 27 '26 12:06

Mitchell Valine



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!