@ ava/ 合作
AVA 4 插件,可以实现测试文件之间的合作.
将它与AVA本身一起安装为发展依赖:
npm install --save-dev @ava/cooperate
使用量
合作是在共同背景下进行的:
import {SharedContext} from '@ava/cooperate';
const context = new SharedContext('my-context');
在所有测试文件中,使用同一标识的上下文(此处: my-context)为共享.
锁定
您可以在上下文中创建锁定 :
const lock = context.createLock('my-lock');
需要获得一个锁。 这是同步的 :
const release = await lock.acquire();
不再需要时释放锁:
release();
锁在测试完成后自动释放 .
使用 acquireNow() 获取锁,或失败:
const release = await lock.acquireNow();
如果锁无法获取, 将会用一个 LockAcquisitionError数字 :
try {
await lock.acquireNow();
} catch (error) {
// error instanceof LockAcquisitionError
// error.name === 'LockAcquisitionError'
// error.lockId === 'my-lock'
}
保留
可以保留出大整数,数字和字符串等原始值. 一旦保留,其他测试文件都无法保留这些相同的值(如果使用正确的共享上下文). 测试完成后将释放保留值 .
const reserved = await context.reserve(1, 2, 3);
// `reserved` will be an array containing those values that could be reserved.
// It could be empty.
司马发
您可以创建 计数 semapore 在共同背景下:
const initialValue = 3; // Must be a non-negative integer.
const semaphore = context.createSemaphore('my-semaphore', initialValue);
在同一背景下,必须创建具有相同ID的母体并具有相同的初始值. 由不同值所创建的司马磷是无法使用的. 他们的方法会以 SemaphoreCreationError。 。 。 .
司马磷有两种方法: acquire() 财务报告和审定财务报表 acquireNow()启用 acquire() 以降低司马发的价值。 如果Semaphore的值变成负值,相反 acquire() 等到司马彪的值足够高.
const semaphore = context.createSemaphore('my-semaphore', 3);
const release = await semaphore.acquire();
acquire() 返回一个函数, release(),它使semaphore的数值递增 与获得的金额相同.
司马发是 管理: 如果你不打电话 release()测试人员离开时会自动运行 任何待定 acquire() 此时也会从队列中移除呼叫.
acquireNow() 喜欢 acquire()但是如果不能立即解冻, acquireNow() 以 SemaphoreDownError 而不是等着.
司马发是 加权。 。 。 . acquire() 财务报告和审定财务报表 acquireNow() 接受非负整数,默认为 1,通过该数值递减或递增:
await semaphore.acquire(0);
await semaphore.acquireNow(2);
您也可以通过一个金额到 release() 一次只释放部分获取:
const release = await semaphore.acquire(3); // Decrements the semaphore by 3
release(1); // Increments the semaphore by 1
release(); // Increments the semaphore by the remaining 2
acquire() 以FIFO顺序调用求解。 如果当前值是 1,而一个电话试图获取 2,随后 acquire() 即使他们想得到 1。 。 。 .
acquireNow() 如果可能,立即跳过队列和减速.
低级别、无人管理
你可以建立一个低级的, 未管理 semaphore 没有任何自动释放行为。 相反,你需要增加代码中的分母.
const initialValue = 3; // Must be a non-negative integer.
const semaphore = context.createUnmanagedSemaphore('my-semaphore', initialValue);
管理不周的司马发不得使用与管理不周的司马发相同的ID,在同一上下文中. 具有相同ID的司马磷必须创建相同的初始值. 管理不当和管理不善的分泌物,或创造的有不同价值的分泌物是无法使用的。 他们的方法会以 SemaphoreCreationError。 。 。 .
无所管理之分有三种方法. down() 财务报告和审定财务报表 downNow() 降低数值和 up() 递增:
await semaphore.down(0);
await semaphore.downNow(2);
await semaphore.up(); // `amount` defaults to 1
喜欢 acquire() 财务报告和审定财务报表 acquireNow() 管理下分母的方法, down() 等待 semaphore 的值至少是请求的数量,同时 downNow() 拒绝方式 SemaphoreDownError 如果值不能立即减少.
这些未经管理的semaphores不会在测试工人出厂时释放出"获得"的金额.