贝贝-插孔-柴-塞-辛克
变换 assert.async.* 调用 test-until 表达式,当断言通过时解决,保留错误信息,以弥补失败的断言.
安装
假设你 已经使用 Babel,安装 Babel 插件 和同伴依赖关系 使用您选择的软件包管理器 :
$ npm install @atom/babel-plugin-chai-assert-async test-until
使用量
通过 .babelrc
.babelrc 图像
{
"plugins": ["@atom/babel-plugin-chai-assert-async"]
}
通过 CLI
$ babel --plugins @atom/babel-plugin-chai-assert-async script.js
节点 API
require("babel-core").transform("code", {
plugins: ["@atom/babel-plugin-chai-assert-async"]
});
细节
在测试中,测试同步设定的值,或者等待条件真实后再继续测试,有时是有用的. 以下是一个曲折的例子:
function setValueAsync(obj) {
setTimeout(() => obj.val = 42, 100)
}
describe('setValueAsync', function() {
it('sets a value asynchronously', function() {
const obj = {val: 0}
setValueAsync(obj)
assert.equal(obj.val, 42) // will fail
})
})
测试会失败,因为 obj.val 不等于 42 在进行断言时.
我们可以用 图书馆之类的 test-until 确保测试不会持续到 obj.val 显示为相等 42这儿有个莫查的例子, async编号 :await
import until from 'test-until'
// ....
it('sets a value asynchronously', function() {
const obj = {val: 0}
setValueAsync(obj)
await until(() => obj.val === 42)
})
然而,在从 assert.equal 此测试的版本到 await until 版本,我们失去了一些信息。 特别是,更难知道 我们究竟在测试什么,如果 until 表达式时断时续,我们得到一个非常通俗的错误信息,如"等待出事的时间"而不是"预期的obj.val到等同42"等有用的信息.
这个转变可以让你转换一些像 assert.equal(obj.val, 42) 改为等值 until 书面表达式 assert.async.equal(obj.val, 42)数字 :
function setValueAsync(obj) {
setTimeout(() => obj.val = 42, 100)
}
describe('setValueAsync', function() {
it('sets a value asynchronously', async function() {
const obj = {val: 0}
setValueAsync(obj)
await assert.async.equal(obj.val, 42)
})
})
在这种情况下,如果async断言失败,则会保留"预期obj.val到等同42"等原始错误消息.
如果你想通过一个暂停 test-until,您可以将其指定为参数 async数字 :
await assert.async(100).equal(obj.val, 42)
实例
基础
单位
async function test() {
await assert.async.equal(thing, other);
}
出来
"use strict";
import until from 'test-until';
async function test() {
await until(async function (fail) {
try {
assert.equal(thing, other);
return true;
} catch (err) {
return fail(err);
}
});
}
有明显的超时
单位
async function test() {
await assert.async(500).equal(thing, other);
}
出来
"use strict";
import until from 'test-until';
async function test() {
await until(async function (fail) {
try {
assert.equal(thing, other);
return true;
} catch (err) {
return fail(err);
}
}, 500);
}