如何验证堆栈中的 SSMParameter 创建?
How to verify SSMParameter creation in stack?
我正在使用 cdk 库创建 aws 资源并且能够成功创建资源。现在我想写一个测试用例来验证CloudFormation的正确性。
以下是创建 SSM 参数的一段代码。
export class SSMParamaters extends cdk.Construct {
constructor(scope: cdk.Construct, id: string, props: SSMParamatersProps) {
super(scope, id);
const param = new ssm.StringParameter(this, "testSSM", {
parameterName: props.envName,
stringValue: String(props.envValue),
});
}
}
下面是同样的测试。但不确定这是测试它的正确方法。
有人可以帮我解决这个问题吗?
test('Test sqs type ssmParameter', () => {
const app = new App();
const testSqsStack = new Stack(app, 'TestSQSStack');
let ssmParam = new SSMParamaters(test, 'test-param',
{
envName: 'Home',
envValue: '/home/test'
});
expect(() => ssmParam).toHaveResource("test-sqs-param");
}
CDK 的 testing constructs 让我们针对 synth-ed JSON CloudFormation 堆栈模板输出进行断言。资源类型 (AWS::SSM::Parameter
) 和 属性 名称(Value
,而不是 value
!)需要匹配模板的 JSON 格式。
例如,cdk.out
中的堆栈模板输出将包含如下内容:
// MyStack.template.json
{
"Resources": {
"FooParameter23C8BF74": {
"Type": "AWS::SSM::Parameter",
"Properties": {
"Type": "String",
"Value": "/home/test",
"Name": "Home"
},
使用 OP 的 @aws-cdk/assert
模块语法,您断言 ssm.Parameter
的存在,如下所示:
// MyStack.test.ts
test('test SSM', () => {
const app = new cdk.App();
const stack = new SimpleSsmStack(app, 'SsmStack', {});
// matches if present in the JSON stack template
expect(stack).toHaveResource('AWS::SSM::Parameter');
// optionally match specific resource properties
expect(stack).toHaveResource('AWS::SSM::Parameter', { Name: 'Home', Value: '/home/test' });
});
注意:@aws-cdk/assert
模块is deprecated. The current assertions module is aws-cdk-lib/assertions,语法不同:
// MyStack.test.ts
import { Template } from 'aws-cdk-lib/assertions';
// ...
const template = Template.fromStack(stack);
template.hasResourceProperties('AWS::SSM::Parameter', { Name: 'Home', Value: '/home/test' });
我正在使用 cdk 库创建 aws 资源并且能够成功创建资源。现在我想写一个测试用例来验证CloudFormation的正确性。
以下是创建 SSM 参数的一段代码。
export class SSMParamaters extends cdk.Construct {
constructor(scope: cdk.Construct, id: string, props: SSMParamatersProps) {
super(scope, id);
const param = new ssm.StringParameter(this, "testSSM", {
parameterName: props.envName,
stringValue: String(props.envValue),
});
}
}
下面是同样的测试。但不确定这是测试它的正确方法。 有人可以帮我解决这个问题吗?
test('Test sqs type ssmParameter', () => {
const app = new App();
const testSqsStack = new Stack(app, 'TestSQSStack');
let ssmParam = new SSMParamaters(test, 'test-param',
{
envName: 'Home',
envValue: '/home/test'
});
expect(() => ssmParam).toHaveResource("test-sqs-param");
}
CDK 的 testing constructs 让我们针对 synth-ed JSON CloudFormation 堆栈模板输出进行断言。资源类型 (AWS::SSM::Parameter
) 和 属性 名称(Value
,而不是 value
!)需要匹配模板的 JSON 格式。
例如,cdk.out
中的堆栈模板输出将包含如下内容:
// MyStack.template.json
{
"Resources": {
"FooParameter23C8BF74": {
"Type": "AWS::SSM::Parameter",
"Properties": {
"Type": "String",
"Value": "/home/test",
"Name": "Home"
},
使用 OP 的 @aws-cdk/assert
模块语法,您断言 ssm.Parameter
的存在,如下所示:
// MyStack.test.ts
test('test SSM', () => {
const app = new cdk.App();
const stack = new SimpleSsmStack(app, 'SsmStack', {});
// matches if present in the JSON stack template
expect(stack).toHaveResource('AWS::SSM::Parameter');
// optionally match specific resource properties
expect(stack).toHaveResource('AWS::SSM::Parameter', { Name: 'Home', Value: '/home/test' });
});
注意:@aws-cdk/assert
模块is deprecated. The current assertions module is aws-cdk-lib/assertions,语法不同:
// MyStack.test.ts
import { Template } from 'aws-cdk-lib/assertions';
// ...
const template = Template.fromStack(stack);
template.hasResourceProperties('AWS::SSM::Parameter', { Name: 'Home', Value: '/home/test' });