- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
测试的目的是模拟获取不同数据源的并行请求。我为每个请求引入了人工延迟,并在一段时间后返回一个带有标识数字的简单字符串,以查看数据是否已从缓存中加载(500 毫秒内的请求)。因此,对于 500 毫秒内加载的数据,输出应为“A1B1”,否则,在 500 毫秒后,应为“A2B2”,依此类推。
// index.test.js
const { wait } = require('./util/wait.js');
const { requestAandB, requestBandC } = require('./index.js');
test('Test cache timings ', () => Promise.all([
// send two requests in parallel after 0 ms (immediately)
wait(0).then(() => Promise.all([
expect(requestAandB()).resolves.toEqual('A1B1'),
expect(requestBandC()).resolves.toEqual('B1C1'),
])),
// send two requests in parallel after 480 ms
wait(480).then(() => Promise.all([
expect(requestAandB()).resolves.toEqual('A1B1'),
expect(requestBandC()).resolves.toEqual('B1C1'),
])),
// send two requests in parallel after 520 ms
wait(520).then(() => Promise.all([
expect(requestAandB()).resolves.toEqual('A2B2'),
expect(requestBandC()).resolves.toEqual('B2C2'),
])),
]));
这就是我模拟数据加载的方式
// get-data.js
async function mockLoading(str) {
// introduce some latency
const waitDuration = Math.round(Math.random() * (WAIT_MAX - WAIT_MIN)) + WAIT_MIN;
await wait(waitDuration);
// create or increase counter every time the function is being called
counters[str] = counters[str] === undefined ? 1 : counters[str] + 1;
return str + counters[str];
}
module.exports = {
loadDataA: async () => mockLoading('A'),
loadDataB: async () => mockLoading('B'),
loadDataC: async () => mockLoading('C'),
}
最后,
requestAandB
方法的实现和
requestBandC
在测试文件中导入:
const { loadDataA, loadDataB, loadDataC } = require('./model/get-data.js');
const all = Promise.all([loadDataA(), loadDataB(), loadDataC()])
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
async function requestAandB() {
const temp = await all
await delay(Math.random() * 510)
return temp.filter((_, i) => i < 2).join("")
}
async function requestBandC() {
const temp = await all
await delay(Math.random() * 510)
return temp.filter((_, i) => i > 0).join("")
}
module.exports = { requestAandB, requestBandC }
对数据“A1B1”、“B1C1”的测试很好,但由于延迟(在
mockLoading
函数中)总是高于 500 毫秒阈值,因此我无法获得之后返回的数据的正确结果。实际上,“A2B2”和“B2C2”总是失败。
最佳答案
看起来您的第一个测试也无法正常工作。
So for data loaded within 500ms the output should be "A1B1", else, after 500ms, it should be "A2B2" and so on.
Tests for the data "A1B1", "B1C1" are fine, but because the latency (in the mockLoading function) is always above the 500ms threshold, I am not able to get the right results for data returned after that. In effect, "A2B2" and "B2C2" always fail.
requestAandB
和
requestBandC
, 因为使用
Math.random()
可以给你随机数,并可能随机失败测试。所以试试这个方法:
test('Test cache timings ', () =>
Promise.all([
// send two requests in parallel after 0 ms (immediately)
expect(requestAandB(0)).resolves.toEqual('A1B1'),
expect(requestBandC(0)).resolves.toEqual('B1C1'),
// send two requests in parallel after 480 ms
expect(requestAandB(480)).resolves.toEqual('A1B1'),
expect(requestBandC(480)).resolves.toEqual('B1C1'),
// send two requests in parallel after 520 ms
expect(requestAandB(520)).resolves.toEqual('A2B2'),
expect(requestBandC(520)).resolves.toEqual('B2C2'),
// send two requests in parallel after 360 ms
expect(requestAandB(360)).resolves.toEqual('A1B1'),
expect(requestBandC(360)).resolves.toEqual('B1C1'),
// send two requests in parallel after 750 ms
expect(requestAandB(750)).resolves.toEqual('A2B2'),
expect(requestBandC(750)).resolves.toEqual('B2C2'),
]));
index.js
const { loadDataA, loadDataB, loadDataC } = require('./get-data.js');
async function requestAandB(time) {
const temp = await Promise.all([
loadDataA(time),
loadDataB(time),
loadDataC(time),
]); // don't use global Promise outside of this function
return temp.filter((_, i) => i < 2).join('');
}
async function requestBandC(time) {
const temp = await Promise.all([
loadDataA(time),
loadDataB(time),
loadDataC(time),
]); // don't use global Promise outside of this function
return temp.filter((_, i) => i > 0).join('');
}
module.exports = { requestAandB, requestBandC };
获取数据.js
// get-data.js
const { wait } = require('./wait.js');
async function mockLoading(time, str) {
await wait(time);
// here is the logic if time is less then 500ms then append 1 else append 2
let label = str;
if (Math.ceil(time / 500) <= 1) {
label += '1';
} else {
label += '2';
}
return label;
}
module.exports = {
loadDataA: async time => mockLoading(time, 'A'),
loadDataB: async time => mockLoading(time, 'B'),
loadDataC: async time => mockLoading(time, 'C'),
};
关于javascript - 如何在 JEST 中测试并行的模拟数据请求,同时以 500 毫秒的阈值模拟缓存响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68030700/
我正在用 R 编写程序。我卡在这里。 我有像这样的矢量 X=c(84.05, 108.04, 13.95, -194.05, 64.03, 208.05, 84.13, 57.04) 我想在用 180
我正在编写一个应用程序,该应用程序涉及使用手指或手写笔在屏幕上书写。我有那部分工作。在 ACTION_DOWN 上,开始绘制;在 ACTION_MOVE 上,添加线段;在 ACTION_UP 上,完成
我正在尝试构建 OCR 以从图像中提取文本,我正在使用轮廓来形成文本字符的边界, 经过几次更改 cv2.threshold 的试验后,我在形成文本字符的边界时得到了最适合的轮廓。 #files = o
我正在尝试使用 OpenCV 的 cv::threshold函数(更具体 THRESH_OTSU ),只是我想用蒙版(任何形状)来做,以便在计算过程中忽略外部(背景)。 图像是单 channel (必
对于学校项目,我试图用 Python 编写一个程序来跟踪学生的运动。为了做到这一点,我正在使用 OpenCV。 在互联网上查找了一些教程后,我注意到几乎每个人都使用阈值来实现这一点,因为几乎每一步都需
我使用 jest 来驱动 selenium 测试,它报告一个需要 12 秒的测试缓慢(持续时间以红色突出显示)。在这种情况下,12 秒就可以了。 如何将阈值配置为 30 秒? 最佳答案 Jest is
我想找到 list1 中与 list2 中的值足够接近的值(基于指定的阈值),即与下面的代码类似的功能。然而,与 pyhton 的 set 交集相比,下面的 intersect_with_thresh
我正在尝试创建一张图表上有两个系列并带有阈值选项的浮线图。我知道当我只有 1 个系列时如何启用阈值(就像这里 http://people.iola.dk/olau/flot/examples/thre
我已正确应用 d3 (v 4.0) 直方图函数对数据数组进行分箱。我的代码如下所示: var bins = d3.histogram() .domain([data_points_min,
我正在使用带有自然语言全文的 Mysql FULLTEXT 搜索,不幸的是,我遇到了 FULLTEXT 50% 阈值,如果给定的关键字出现在总行数的 50% 时间,则不允许我搜索行。 我搜索并找到了一
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
这是我的绘图数据 var data = [{ data: [[4, 80], [8, 50], [9, 130]], color: "r
是否可以制作Canny忽略短边还是忽略低梯度边?在我的例子中,我将卡片放在木头上,并在 canny 之后看到木结构的许多边缘 canny 函数中的两个阈值有什么用? 最佳答案 Large intens
我正在尝试使用 OpenCV 的 cv::threshold 函数(更具体的 THRESH_OTSU),只是我想使用掩码(任何形状) ), 以便在计算过程中忽略外部(背景)。 图像是单 channel
我正在寻找根据提供的音频、频率范围(例如 20hz-1000hz)和阈值缩放 PNG 文件,以获得平滑的效果。 例如,当有脚踢时,比例平滑到 120%,我想让那些音频可视化器,如 dubstep 等.
我正在尝试找到最佳阈值,以使我的逻辑回归具有最高的 f1 分数。但是,当我写下以下几行时: val f1Score = metrics.fMeasureByThreshold f1Score.fore
我使用 Flot 创建了一个实时(每 10 毫秒更新一次)垂直样条图。图表可见here on Codepen 。我包括了 Flot multiple threshold plugin ,但我希望阈值使
我有一个数据框,其中包含从第 1 天到第 7 天的三个人(John、Terry、Henry)的分数。 1 2 3 4 5 6 7
我正在尝试实现多级 Otsu 阈值,更具体地说,我需要 3 个阈值/4 个类。 我知道关于 SO 的 2 个类似问题:#34856019 和 #22706742。问题是我没有得到好的结果:我已经阅读了
The documentation在 THRESH_BINARY 上说: dst(x,y) = maxval if src(x,y) > thresh else 0 这对我来说并不意味着这不适用于彩色
我是一名优秀的程序员,十分优秀!