在Jest中的不同环境中运行相同的测试

时间:2019-04-22 20:45:01

标签: node.js typescript jestjs

最终,我要测试的功能在节点或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)
})

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

1 个答案:

答案 0 :(得分:0)

根据我对这个问题的评论进行回答。

// 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)