javascript - 全局存储来自服务器的数据
问题描述
使用 jest 和 react-testing-libary。
我的服务器中有数据,要获取这些数据,我需要登录,然后获取它。有没有办法让这些数据在所有测试文件中都可用?
解决方案
我通常这样做的方式是使用文件beforeAll
中的钩子setupTests.js
。这样,beforeAll
钩子内的代码将在每个测试文件运行之前运行,我每次都会得到新的数据。
get data in beforeAll async --> run test-file 1
get data in beforeAll async --> run test-file 2
...
...
我通常还使用afterAll
钩子清理所有内容,以确保我的数据不会在正在执行的测试文件之间混淆。
示例代码如下:
// setupTests.js file
beforeAll(async () => {
const response = await fetch("url-to-my-server");
const data = await response.json();
// store the data as a global variable by using global object
global.sampleData = data;
});
// cleanup any data or resources below:
afterAll(()=> global.sampleData='');
然后在我的测试文件中,我可以像这样使用该数据:
test("renders soemthing", () => {
const data = global.sampleData;
expect(data).toBe({whatever-i-expect-it-to-be});
});
推荐阅读
- arrays - Ruby - 转换多个数组以生成哈希
- html - 在文本列表上垂直对齐冒号
- python - 通过与另一个比较相等的对象进行匹配,从 python 字典中获取特定对象
- python - 如何按条件一一过滤列(Python)
- c - C 线程中 pthread_create 函数的第四个参数的范围
- r - dplyr 在两列上不同
- java - 如果另一个集合中的另一个值为 true,则从 Firebase 获取值
- java - java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;I)V 与 IE 和 Selenium 通过 Java
- neo4j - Cypher:匹配具有相反方向的多种关系类型
- android - 如何将 Exoplayer 的控件放置在 PlayerView 之外