trong bài viết trước mình đã chia sẽ cách khởi tạo subnet trong CDK, nếu bạn chưa xem có thể xem lại ở đây.
Refactor code là điều cần thiết và thường xuyên mỗi khi lập trình, đối với CDK để biết được code chạy đúng, bạn cần đảm bảo là lệnh synth chạy không lỗi, sau đó deploy lên môi trường test để kiểm tra, sau khi đã đúng yêu cầu, bạn sẽ tiến hành refactor lại code, nhưng làm thế nào để biết được code sau khi refactor sẽ không bị ảnh hưởng gì đến hạ tầng thực tế.
Trong bài này, mình xin chia sẽ cách mình dùng framework jest để tạo snapshot test cho CDK, phục vụ cho việc kiểm tra sau khi refactor code.
Chuẩn bị
Cài đặt thêm gói sau
npm i -D @aws-cdk/assertions-alpha
Sửa lại file test/hello-ckd.test.ts với nộ dung như sau
import { Template } from '@aws-cdk/assertions-alpha';
import * as cdk from 'aws-cdk-lib';
import { HelloCkdStack } from '../lib/hello-ckd-stack';
const env = {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION,
};
const app = new cdk.App({
context: {
config: 'dev',
dev: {
projectOwner: 'Quan.devopsify',
projectName: 'cdk-learning',
costOwner: 'huyntt.devopsify',
},
},
});
const mainStack = new HelloCkdStack(app, `CdkStarterStack`, { env });
describe('MainStack', () => {
test('snapshot MainStack', () => {
expect(Template.fromStack(mainStack)).toMatchSnapshot();
});
});
Cách hoạt động cúa snapshot test là nó sẽ chụp lại toàn bộ output của bước Synth ở thời điểm mà bạn cho là tốt nhất của hạ tầng, sau khi điều chỉnh code, bạn sẽ chạy test, nếu có khác biệt giữa hai lần Synth thì sẽ có thông báo, tư đó giúp bạn phát hiện kịp thời những thay đổi vô tình đã ảnh hưởng đến hạ tầng.
Thử nghiệm
Mình sẽ tiến hành chụp lại output của lệnh Synth
mình sẽ run lại test, và lập tức nó sẽ báo cho mình biết đã có ựu thay đổi, nhưng nếu sự thay đổi đó là có chủ đích thì sao?
Thì bạn sẽ phải chụp lại bằng cách xóa đi thư mục test/__snapshots__
Github
code trong bài viết mình để ở đây, bạn có thể clone về để tìm hiểu thêm nhé