【问题标题】:Run same tests in different environment in Jest在 Jest 的不同环境中运行相同的测试
【发布时间】:2019-09-12 00:43:38
【问题描述】:

最终我想测试的功能在 node 或 web 中使用时具有相同的功能。然而,在内部,该函数以不同的方式为节点和 web 编写,所以我需要测试它们。因为功能是相同的,所以我不想两次编写相同的测试。考虑一下(假设函数的内部不同):

// mylib/node/index.ts
export function add(a: number, b: number) {
  return a+b
}
// mylib/web/index.ts
export function add(a: number, b: number) {
  return a+b
}

我正在做的测试:

// nodeAdd.test.ts
/**
 * @jest-environment node
 */
import { add } from './mylib/node'

test('addition', () => {
  expect(add(1, 2)).toEqual(3)
})
// webAdd.test.ts
/**
 * @jest-environment jsdom
 */
import { add } from './mylib/web'

test('addition', () => {
  expect(add(1, 2)).toEqual(3)
})

所以测试是相同的,但是它是在不同的环境中运行并从不同的位置导入的。是否可以编写一次测试并同时测试两个环境?

【问题讨论】:

  • 如果您使用的是monorepo,您​​可以创建一个通用文件测试,其中可以根据您的环境注入函数add。您可以将测试包装在一个函数中,该函数具有您想要测试的参数函数。
  • 你能告诉我一个例子如何基于我的add函数来实现它吗?

标签: node.js typescript jestjs


【解决方案1】:

根据我对问题的评论回答。

// mylib/common/index.ts
export const commonAddTest = (add: (a: number, b: number) => number) => {
  test('addition', () => {
    expect(add(1, 2)).toEqual(3)
  })
}
// nodeAdd.test.ts
/**
 * @jest-environment node
 */
import { commonAddTest } from './mylib/common'
import { add } from './mylib/node'

commonAddTest(add)
// webAdd.test.ts
/**
 * @jest-environment jsdom
 */
import { commonAddTest } from './mylib/common'
import { add } from './mylib/web'

commonAddTest(add)

【讨论】:

  • 谢谢,根据您对相同功能但不同目标功能的回答创建了一个小型测试生成器
猜你喜欢
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2011-02-21
  • 1970-01-01
相关资源
最近更新 更多