gpt4 book ai didi

javascript - Mocha 单元测试中的 Promise

转载 作者:行者123 更新时间:2023-12-03 06:46:00 25 4
gpt4 key购买 nike

此问题与 Using Promises to test Meteor - Mocha 相关

就像路易斯建议的那样,我在一个较小的程序中复制了相同的问题,以便您可以重现这个问题。在这一点上,Mocha 也不关心断言语句。 Promise 的 catch block 会出现此错误。

/server/main.js

import { Meteor } from 'meteor/meteor';

export const myCollection = new Mongo.Collection('mycollection');

export const addObject = function (id) {
myCollection.insert({
name: 'test ' + id
});
}

Meteor.publish('mycollection', function() {
return myCollection.find({});
});

/server/main.test.js

/**
* Created by enigma on 6/9/16.
*/
import { Meteor } from 'meteor/meteor';
import { PublicationCollector } from 'meteor/johanbrook:publication-collector';
import { Promise } from 'meteor/promise';
import { assert } from 'meteor/practicalmeteor:chai';
import { Random } from 'meteor/random';
import { addObject } from '../server/main.js';

if (Meteor.isServer) {
describe('test mocha promise', function() {
before(function() {
addObject(Random.id());
});
it('collects myCollection test', function() {
const collector = new PublicationCollector({ userId: Random.id()});

return new Promise(function(resolve) {
collector.collect('mycollection', function (collections) {
resolve(collections);
});
}).then(function(coll) {
chai.assert.notEqual(coll, null);
chai.assert.equal(coll, null);
}).catch(function(err) {
console.log('error:', err.stack);
});
});
});
}

控制台输出

=> Meteor server restarted
I20160609-18:31:14.546(-5)? MochaRunner.runServerTests: Starting server side tests with run id GK3WqWY4Ln9u6vmsg
I20160609-18:31:14.598(-5)? error: AssertionError: expected { Object (mycollection) } to equal null
I20160609-18:31:14.598(-5)? at Function.assert.equal (packages/practicalmeteor_chai.js:2635:10)
I20160609-18:31:14.598(-5)? at test/main.test.js:25:29
I20160609-18:31:14.598(-5)? at /Users/enigma/.meteor/packages/promise/.0.6.7.1d67q83++os+web.browser+web.cordova/npm/node_modules/meteor-promise/fiber_pool.js:33:40
W20160609-18:31:14.607(-5)? (STDERR) MochaRunner.runServerTests: failures: 0

最佳答案

你需要要么抛出catch,要么删除catch,这样mocha也会得到错误。目前,自从您发现错误以来, Mocha 的 promise 已得到解决。

以下是我在问题更改之前的旧答案ps:看来我误解了 meteor 的发布,所以下面的答案并不正确

<小时/>

您遇到的错误是因为“mycollection”未发布

我可能是因为Meteor.publish('mycollection'); is an async function ,当您测试它时,该集合尚未发布。

您应该在测试之前在 before() 中进行发布

以下是如何等待发布完成之前的示例

关于javascript - Mocha 单元测试中的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37735838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com