gpt4 book ai didi

javascript - 开 Jest : How to teardown after (just) an individual test

转载 作者:行者123 更新时间:2023-12-03 16:48:24 27 4
gpt4 key购买 nike

jest提供afterEach , beforeEach , afterAllbeforeAll完成设置和拆卸逻辑。我想做的是在一项特定测试后进行清理。考虑以下:

describe("a family of tests it makes sense to group together", () => {
...
test("something I want to test", () => {
// some setup needed for just this test
global.foo = "bar"

// the test
expect(myTest()).toBe(true)

// clear up
delete global.foo
}
...
}
上面的问题...
如果上面的测试由于某种原因失败了,那么 delete global.foo永远不会运行。这意味着它之后的所有测试都可能失败。我没有看到 1 个测试失败,而是看到一大堆测试失败,这可能会令人困惑。
潜在(非理想)解决方案
一种解决方案是添加 delete global.foo进入我的 afterEach .它实际上并不需要在每次测试后运行,但它也不会造成任何伤害。另一种解决方案是单独进行特定测试,以便 afterEach只适用于它。但这似乎也不理想——如果该测试属于其他测试,那么它可能会保留在它们身上。
我的问题:
有没有办法只为特定测试运行拆解逻辑(而不在实际测试中运行它)。在我的特定用例中,第一个概述的解决方案很好,但我可以想象可能存在需要更细粒度控制的情况。例如,如果我的拆卸方法需要很长时间,我不想重复很多,因为这会减慢整个测试套件的速度。

最佳答案

在许多情况下,测试可以共享一个共同的 afterEach即使其中一个需要清理,只要不影响其他人。
否则,这是 block 结构负责的。一个或多个测试可以用嵌套 describe 分组。只为拥有自己的afterEach , etc block ,唯一的缺点是它使报告不那么漂亮:

describe("a family of tests it makes sense to group together", () => {
...
describe("something I want to test", () => {
beforeEach(() => {
global.foo = "bar"
});

test("something I want to test", () => {
expect(myTest()).toBe(true)
}

afterEach(() => {
delete global.foo
});
});
beforeEachafterEach可以脱糖为 try..finally :
test("something I want to test", () => {
try {
global.foo = "bar"

expect(myTest()).toBe(true)
} finally {
delete global.foo
}
})
这也允许异步测试,但需要使用 async 编写。而不是 done .

关于javascript - 开 Jest : How to teardown after (just) an individual test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62957947/

27 4 0
文章推荐: php - 从外部 FTP 服务器读取 > 1GB GZipped CSV 文件
文章推荐: angular - PrimeNG 多选自动对焦
文章推荐: graphql - javascript "cannot add property" "object is not extensible"当我在 graphql 查询中更新缓存时
文章推荐: angular - typescript :将 json 从 api 调用转换为 Array