首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试运行CDK测试时出错: TypeError:正在将循环结构转换为JSON,从构造函数为'CloudFormationStackArtifact‘的对象开始

尝试运行CDK测试时出错: TypeError:正在将循环结构转换为JSON,从构造函数为'CloudFormationStackArtifact‘的对象开始
EN

Stack Overflow用户
提问于 2021-10-04 13:46:51
回答 2查看 264关注 0票数 0

我刚接触CDK,我写了我的CDK,它已经部署好了,一切都很好,正如预期的那样,现在到了为我的CDK编写测试的有趣部分了。

这是我的CDK文件(rte-stack.ts):

代码语言:javascript
复制
import * as iam from '@aws-cdk/aws-iam';
export class RTEStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Read from secrets manager role
    const lambdaReadFromASMRole = new iam.Role(this, 'lambdaReadFromASMRole', {
      roleName: 'lambdaReadFromASMRole',
      assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
      managedPolicies: [
        iam.ManagedPolicy.fromAwsManagedPolicyName("SecretsManagerReadWrite"),
      ]
    });
  }
}

我写了一个简单的测试:

代码语言:javascript
复制
import * as assert from '@aws-cdk/assert';
import { SynthUtils } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import * as RTE from '../lib/rte-stack';

const { expect: expectCDK, haveResource } = assert;

test('Stack creates resources', () => {
    const app = new cdk.App();
    const stack = new RTE.RTEStack(app, 'MyTestStack', {
        env: {
            account: process.env.CDK_DEFAULT_ACCOUNT,
            region: process.env.CDK_DEFAULT_REGION
        }
    });

    expectCDK(stack).to(assert.countResources('AWS::IAM::Role', 1));
});

但是当我尝试运行我的测试时,我得到:

代码语言:javascript
复制
  ● Stack creates resources

    TypeError: Converting circular structure to JSON
        --> starting at object with constructor 'CloudFormationStackArtifact'
        |     property 'assembly' -> object with constructor 'CloudAssembly'
        |     property 'artifacts' -> object with constructor 'Array'
        --- index 0 closes the circle
        at JSON.stringify (<anonymous>)

这是我在package.js中使用的版本

代码语言:javascript
复制
  "devDependencies": {
    "@aws-cdk/assert": "1.125.0",
    "@types/jest": "27.0.2",
    "@types/node": "10.17.27",
    "jest": "27.0.5",
    "ts-jest": "27.0.5",
    "aws-cdk": "1.125.0",
    "ts-node": "9.0.0",
    "typescript": "3.9.7"
  },
  "dependencies": {
    "@aws-cdk/aws-apigateway": "1.125.0",
    "@aws-cdk/aws-ec2": "1.125.0",
    "@aws-cdk/aws-iam": "1.125.0",
    "@aws-cdk/aws-lambda-nodejs": "1.125.0",
    "@aws-cdk/aws-rds": "1.125.0",
    "@aws-cdk/core": "1.125.0",
    "source-map-support": "0.5.20"
  }

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2021-10-12 10:43:47

在使用自定义构造时,我也看到了这个问题。看起来您还有一个名为RTEStack的自定义构造。

在我的例子中,我的自定义构造原来具有CDK v1.124.0的依赖项,而我编写使用自定义构造的测试的项目依赖于v1.125.0。通过确保他们使用相同版本的CDK (在我的情况下,我将两者都更新到1.127.0 )解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2021-10-31 18:54:21

我也有同样的想法,在所有CDK库的版本之前删除^是有帮助的,但在我看来,这已经不是您的情况了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69437126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档