我正在编写cdktf(在typescript中)来单元测试组成一些基础设施的组件。我想知道如何测试IamInstanceProfile中的角色设置是否正确。由于它是自动生成的(使用synth),似乎没有内置的方法来检查。
将iamRole设置为iamInstanceProfile的代码
export class Roles extends Construct {
iamRole: IamRole;
iamInstanceProfile: IamInstanceProfile;
constructor(scope: Construct, id: string) {
super(scope, id);
this.iamRole = new IamRole(this, "xxx", {
assumeRolePolicy: this.getPolicy().json,
managedPolicyArns: [
"arn:aws:iam::aws:policy/xxx"
],
name: "xxx"
});
this.iamInstanceProfile = new IamInstanceProfile(this, "yyy", {
name: "test_profile",
role: this.iamRole.name
});
}
单元测试
const stack = Testing.synth( new MyStack(new App(), "RunnerTest", baseConfig));
expect(stack).toHaveResourceWithProperties(IamInstanceProfile, {
name: 'test_profile',
role: '<???HOW-TO-GET-THIS-VALUE???>'
});
误差
Error: Expected aws_iam_instance_profile with properties {"name":"test_profile","role":"<???HOW-TO-GET-THIS-VALUE???>"} to be present in synthesized stack.
Found 1 aws_iam_instance_profile resources instead:
[
{
"name": "test_profile",
"role": "<AUTO_GENERATED>"
}
]
是否可以在不解析stack
json输出的情况下找到角色的生成值?
1条答案
按热度按时间qojgxg4l1#
.name
是一个引用,将产生一个内容为${aws_iam_role.<ID>.name}
的字符串。(以便这些ID可以保持全局唯一,同时在构造内部和外部具有相同的名称),因此无法猜测。要找到它,可以使用快照测试或控制台日志,但是为了能够适应变化,你需要构建一个函数来找到它,或者你可以使用.overrideLogicalId("new_id")
函数来覆盖IAMRole的ID。如果你在类上公开角色,你甚至可以在测试用例中这样做。