小编Gol*_*lsh的帖子

如何使用 Jest 测试忽略 import 语句?

我正在尝试为工厂模块编写测试。该工厂模块导入一个对象模块,然后返回给定特定字符串的新实例。它导入的对象导入更多的东西,并且它正在导入的对象之一导入另一个对象,该对象导入另一个依赖于某些环境变量的脚本。该脚本运行后无法找到所需的环境变量,甚至在测试开始之前就终止了该进程。

\n

我认为没有必要导入这么多层来测试这个特定的工厂。解决这个问题的正确方法是什么?请注意,我对 javascript/typescript 非常陌生,因此任何对包导入的工作方式的了解都会有所帮助。

\n

jest.mock 不会阻止底层对象上的 import 语句运行。

\n
//object-factory.ts\nimport {AnObject} from \'../interfaces/an-object\';\nimport VeryNiceObject from \'./very-nice-object\';\n\nexport const VERY_NICE_STRING = \'this-string-is-very-nice\'\n\nexport class ObjectFactory {\n    private readonly str: string;\n\n    constructor(str: string) {\n        this.str = str;\n    }\n\n    public build(): AnObject {\n        switch (this.str) {\n            case VERY_NICE_STRING:\n                return new VeryNiceObject();\n            default:\n                throw new Error(`Unknown string ${this.str}`);\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我正在尝试隔离这个正在测试的模块。我的测试看起来像这样 -

\n
jest.mock("../very-nice-object")\n\nimport {AnObject} from "../../interfaces/an-object";\nimport {ObjectFactory, VERY_NICE_STRING} from "../object-factory"; //FAILS HERE\nimport VeryNiceObject from "../very-nice-object";\n\ndescribe(\'object-factory\', () => {\n    test("build returns VeryNiceObject", …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing typescript jestjs

7
推荐指数
1
解决办法
7668
查看次数

如何使用 Typescript 创建 Jest 自定义环境?

我正在尝试创建一个扩展jest-node-environmentCustomTestEnvironment但是在尝试运行 jest 时出现以下错误

? Test suite failed to run

    ~/git/my-application/tests/environment/custom-test-environment.ts:1
    import NodeEnvironment from 'jest-environment-node';
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      at runTestInternal (../node_modules/jest-runner/build/runTest.js:226:5)
Run Code Online (Sandbox Code Playgroud)

我相信这个错误意味着它没有将其识别为打字稿文件,并且没有对其进行转译。(我使用的是最新版本的 jest 26.0.1)

根据 jest github 中的讨论,完成这项工作的 PR 原定用于 Jest 26,但已从 Jest 26 中撤出,并且(希望)将出现在 Jest 27 中 。https://github.com/facebook/jest/pull /8751

话虽如此,我已经在网上看到人们这样做的样本,但对我来说,跟随他们的领导并没有任何运气。

import NodeEnvironment from "jest-environment-node";
import {LocalObject} from "./object/local-object.helper";

export class CustomTestEnvironment extends NodeEnvironment {

    public async setup(): Promise<void> {
        await super.setup();
        this.global.localObject = LocalObject.init()
    }

    public async teardown(): Promise<void> { …
Run Code Online (Sandbox Code Playgroud)

javascript automated-tests typescript jestjs

7
推荐指数
1
解决办法
2096
查看次数

Terraform:将对象列表转换为来自对象的单个元素列表

我有一个来自 terraform 变量的对象列表

variable "persons" {
  type = list(object({
    name = string,
    phonenumber = string,
    tshirtSize = string
  }))
    description = "List of person"
}
Run Code Online (Sandbox Code Playgroud)

现在我想要一个人名列表,以便我可以用它来定义一个 AWS 资源

如何将此对象列表转换为名称列表 ["bob", "amy", "jane"]

我在 terraform 0.12.24 上,但如果需要可以升级

terraform

7
推荐指数
1
解决办法
3248
查看次数

Terraform HCL - 将列表转换为对象地图?

我有一个字符串列表,我需要将其转换为地图,这样当我jsonencode稍后对其进行转换时,它就不会创建数组。这是因为在 json-schema 中,它properties: { ... }不是属性列表,而是实际上的映射。

因此,我列表中的每个属性都应该作为键值映射出现。其中键是属性名称,值是另一个映射或对象 { "type" = "string" }。

additional-properties = [
  for prop in local.prop-list:
    { prop = { "type" = "string" }}
]
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试最终得到了地图对象列表,而不是属性地图。

有更好的方法来实现这一点吗?

我的最终目标是能够在 API 网关模型的 json 模式中使用 jsonencode -

"properties": {
  "prop1": {
    "type": "string"
  },
  "prop2": {
    "type": "string"
  }
}
Run Code Online (Sandbox Code Playgroud)

terraform hcl

6
推荐指数
1
解决办法
2万
查看次数

如何使用不同的 jest.config.js 进行单元和组件测试?

我正在尝试为应用程序的组件级测试创建一套单独的测试。

在这个单独的套件中,我需要一个自定义测试环境来引导一些持久层模拟,并且这些测试将与我的单元测试放在我的项目结构中的一个单独文件夹中。

例如,单元测试将在__tests__文件夹中的代码附近,而组件测试将在顶级tests/目录中。

我已经有我的大部分jest.config.js设置的,但是当我加入了projects部分重写某些字段,特别是testMatchtestEnvironment它完全不理会在全球指定我的配置。

现在我一直在读到projects配置主要是关于 monorepo 设置,所以我认为这不是正确的方法。

理想情况下,我可以jest.config.js在我的tests/目录中有一个单独的目录,但我不知道如何设置它,如果它甚至有效。

对此问题的任何见解都会有所帮助。提前致谢。

javascript testing jestjs ts-jest

2
推荐指数
2
解决办法
2794
查看次数

如何在删除事件 Github 操作中提取分支名称

我正在尝试提取删除事件中的分支名称。事实证明它不在 GITHUB_REF 对象中,因为那将是default branch.

通常我会跑

- name: Extract branch name
  shell: bash
  run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
  id: extract_branch
Run Code Online (Sandbox Code Playgroud)

但显然,对于删除事件,我需要通过以下方式提取分支${{ github.event.ref }}

- name: Extract branch name
  shell: bash
  run: echo "##[set-output name=branch;]$(echo ${{ github.event.ref }})" # how to drop refs/heads/?
  id: extract_branch
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何删除分支名称的 refs/heads 方面。

编辑:因为在删除事件的情况下,github.event.ref已经包含简单的分支名称,例如,上面的示例代码不起作用feature-1-my-branchrefs/heads/feature-1-my-branch

如果我想在不同的事件类型中对此上下文进行一些后处理,在这种情况下我将如何删除 where 返回github.event.refrefs/heads/feature-1-my-branchrefs/heads

github-actions

2
推荐指数
1
解决办法
3328
查看次数