开玩笑将变量传递给测试
Jest passing variables to tests
我有一个各种测试套件需要的变量。我没有在每个套件中进行初始化,而是决定使用一个带有 beforeAll
的测试文件来初始化变量并将测试拆分为套件文件,这基本上是导出测试。
为了简单起见,我们假设我的测试文件(唯一的 jest
调用)是这样的:
import { foobar } from './foobar'
let foo
beforeAll(() => {
foo = 'bar'
})
describe('foo is bar', () => {
foobar(foo)
})
我的测试套件文件之一是这样的:
export const foobar = (foo) => {
it('should be defined', () => expect(foo).toBeDefined())
it('should be bar', () => expect(foo).toMatch('bar'))
}
它不起作用。 foo
总是 undefined
并且测试失败。
foo is bar
✕ should be defined (3 ms)
✕ should be bar
我错过了什么?我可能今天脑子放屁了,所以如果我很傻,请原谅。
编辑(@Estus Flask)
如果我只在导入的 foobar
文件中定义检查,如下所示:
export const foobar = (foo) => expect(foo).toBeDefined()
然后我像这样修改测试文件:
import { foobar } from './foobar'
let foo
beforeAll(() => {
foo = 'bar'
})
describe('foo is bar', () => {
it('should be defined', () => foobar(foo))
})
有效:
foo is bar
✓ should be defined (2 ms)
那么,Jest 是如何组织不同流程的呢?是的,我可以将参数放在全局命名空间中,但我想避免这样做。
我找到了解决办法。我没有将 foo
传递给 foobar
函数,而是导出它然后在需要的地方导入它。
所以,我的测试文件看起来像这样(导出 foo
)
import { foobar } from './foobar'
export let foo
beforeAll(() => {
foo = 'bar'
})
describe('foo is bar', () => {
foobar()
})
我的测试套件文件如下所示:
import { foo } from './foo.test'
export const foobar = () => {
it('should be defined', () => expect(foo).toBeDefined())
it('should be bar', () => expect(foo).toMatch('bar'))
}
现在一切都过去了:
foo is bar
✓ should be defined (1 ms)
✓ should be bar
我有一个各种测试套件需要的变量。我没有在每个套件中进行初始化,而是决定使用一个带有 beforeAll
的测试文件来初始化变量并将测试拆分为套件文件,这基本上是导出测试。
为了简单起见,我们假设我的测试文件(唯一的 jest
调用)是这样的:
import { foobar } from './foobar'
let foo
beforeAll(() => {
foo = 'bar'
})
describe('foo is bar', () => {
foobar(foo)
})
我的测试套件文件之一是这样的:
export const foobar = (foo) => {
it('should be defined', () => expect(foo).toBeDefined())
it('should be bar', () => expect(foo).toMatch('bar'))
}
它不起作用。 foo
总是 undefined
并且测试失败。
foo is bar
✕ should be defined (3 ms)
✕ should be bar
我错过了什么?我可能今天脑子放屁了,所以如果我很傻,请原谅。
编辑(@Estus Flask)
如果我只在导入的 foobar
文件中定义检查,如下所示:
export const foobar = (foo) => expect(foo).toBeDefined()
然后我像这样修改测试文件:
import { foobar } from './foobar'
let foo
beforeAll(() => {
foo = 'bar'
})
describe('foo is bar', () => {
it('should be defined', () => foobar(foo))
})
有效:
foo is bar
✓ should be defined (2 ms)
那么,Jest 是如何组织不同流程的呢?是的,我可以将参数放在全局命名空间中,但我想避免这样做。
我找到了解决办法。我没有将 foo
传递给 foobar
函数,而是导出它然后在需要的地方导入它。
所以,我的测试文件看起来像这样(导出 foo
)
import { foobar } from './foobar'
export let foo
beforeAll(() => {
foo = 'bar'
})
describe('foo is bar', () => {
foobar()
})
我的测试套件文件如下所示:
import { foo } from './foo.test'
export const foobar = () => {
it('should be defined', () => expect(foo).toBeDefined())
it('should be bar', () => expect(foo).toMatch('bar'))
}
现在一切都过去了:
foo is bar
✓ should be defined (1 ms)
✓ should be bar