所以,我在测试一个依赖于事件发射器的组件。为此,我想出了一个解决方案,使用mocha+chai的承诺:
it('should transition with the correct event', (done) => {
const cFSM = new CharacterFSM({}, emitter, transitions);
let timeout = null;
let resolved = false;
new Promise((resolve, reject) => {
emitter.once('action', resolve);
emitter.emit('done', {});
timeout = setTimeout(() => {
if (!resolved) {
reject('Timedout!');
}
clearTimeout(timeout);
}, 100);
}).then((state) => {
resolved = true;
assert(state.action === 'DONE', 'should change state');
done();
}).catch((error) => {
assert.isNotOk(error,'Promise error');
done();
});
});
在控制台上,我得到了一个“unhandledPromiserEjectionWarning”,尽管reject函数正在被调用,因为它会立即显示消息“assertionError:Promise Error"
(Node:25754)UnhandledPromiseRejectionWarning:UnhandledPromiseRejectionWarning:UnhandledPromiseRejection(rejection ID:2):AssertionError:promise Error:{Object(message,showDiff,。。。)}应为
然后,两秒钟后我
错误:超时2000ms。确保在此测试中调用了done()回调。
null
null
Mocha中的断言库通过在断言不正确的情况下抛出错误来工作。抛出错误会导致拒绝的承诺,即使在提供给
.catch((error) => {
assert.isNotOk(error,'Promise error');
done();
});
在上面的代码中,被对象的
it('should transition with the correct event', (done) => {
const cFSM = new CharacterFSM({}, emitter, transitions);
let timeout = null;
let resolved = false;
new Promise((resolve, reject) => {
emitter.once('action', resolve);
emitter.emit('done', {});
timeout = setTimeout(() => {
if (!resolved) {
reject('Timedout!');
}
clearTimeout(timeout);
}, 100);
}).then(((state) => {
resolved = true;
assert(state.action === 'DONE', 'should change state');
})).then(done,done);
});
在Mocha中测试承诺时使用。then(DoneDone)的想法值得称赞。
我在和Sinon打短板的时候出现了这个错误。
修复方法是在解析或拒绝带有存根的承诺时使用npm包sinon-as-promedied。
null
sinon.stub(Database, 'connect').returns(Promise.reject( Error('oops') ))
null
require('sinon-as-promised');
sinon.stub(Database, 'connect').rejects(Error('oops'));
null
参见http://clarkdave.net/2016/09/node-v6-6-and-asynchronously-handled-promise-rejections
null
.catch((error) => {
assert.isNotOk(error,'Promise error');
done();
});
如果断言失败,它将抛出一个错误。此错误将导致永远不会调用
“未处理的承诺拒绝”也是由失败的断言引起的,因为如果在
null
像这样:
it('should transition with the correct event', () => {
...
return new Promise((resolve, reject) => {
...
}).then((state) => {
assert(state.action === 'DONE', 'should change state');
})
.catch((error) => {
assert.isNotOk(error,'Promise error');
});
});
问题内容: 有没有一种方法可以快速测试这些中间件: 我发现的唯一中间件测试是: 这与上面提供的简单中间件(类似于使用回调测试基本功能)很好地配合使用,但是对于更复杂的中间件,我无法使其正常工作。可以测试这种中间件吗? 问题答案: 这里有一个简单的设置,你可以使用,使用和: 从那里,您可以为模式匹配等添加更多详细的测试。由于仅使用,因此不必模拟整个对象(由Express创建),而只需使用带有属性的简
目标 建立一个 lesson7 项目,在其中编写代码,我们暂时命名为 vendor 根据下面的步骤,最终的项目结构应该长这样 这次我们测试的对象是上文提到的 fibonacci 函数 此函数的定义为 int fibonacci(int n) 当 n === 0 时,返回 0;n === 1时,返回 1; n > 1 时,返回 fibonacci(n) === fibonacci(n-1) + fi
自动化测试将被用于进一步的任务中,并且还将被广泛应用在实际项目中。 为什么我们需要测试? 当我们在写一个函数时,我们通常可以想象出它应该做什么:哪些参数会给出哪些结果。 在开发期间,我们可以通过运行程序来检查它并将结果与预期进行比较。例如,我们可以在控制台中这么做。 如果出了问题 —— 那么我们会修复代码,然后再一次运行并检查结果 —— 直到它工作为止。 但这样的手动“重新运行”是不完美的。 当通
和should接口都利用链接来构造类似英语的句子来描述测试。 一旦你决定了一个风格,你应该保持这种风格为所有其他测试。 每种风格都有自己独特的语法; 请参阅该 。
我有一个nodejs应用程序,它具有使用backbonejs和在js构建的客户端代码。我想使用mocha在我的nodejs服务器上测试客户端代码。 我的摩卡测试文件:test/view.coffee 要测试的backonejs文件:public/javascripts/views/test_view.coffee 在public/javascript/libs中,我有jQuery、骨干和下划线的缩