This package makes testing publications in Meteor easier and nicer.
Instead of resorting to exporting or exposing your publication functions for doing testing, this package lets you "subscribe" to a given publication and assert its returned results.
meteor add johanbrook:publication-collector
This package is server-only and can't be imported on the client.
// server/myPublication.test.js
import { PublicationCollector } from 'meteor/johanbrook:publication-collector';
describe('myPublication', function() {
it('should publish 10 documents', function(done) {
const collector = new PublicationCollector({ userId: Random.id() });
collector.collect('myPublication', firstPublicationArg, secondPublicationArg, (collections) => {
assert.equal(collections.myCollection.length, 10);
done();
});
});
});
const collector = new PublicationCollector(opts);
opts
may have the following attributes:
userId
: Add athis.userId
to the publication's contextdelayInMs
: By default,collect
callbacks are called when the publication is ready. If you use this option, the callbacks will be calleddelayInMs
milliseconds after the publication is ready.
An instance of PublicationCollector
also is an EventEmitter
, and emits a ready
event when the publication is marked as ready.
collector.collect(publicationName, publicationArgs..., callback);
publicationName (String)
: the name of the publication (String)publicationArgs
: zero or more arguments to the publicationcallback (Function)
: The function to be called when the publication is ready. The function will be provided with acollections
object containing key:value pairs where the key is the name of a collection that the publication published and the value is an array of the documents that were published in that collection.
collector.collect('myPublication', firstPublicationArg, secondPublicationArg, (collections) => {
assert.equal(collections.myCollection.length, 10);
});
npm install
Follow .eslintrc
Run tests once with
npm test
Run tests in watch mode (in console) with
npm run test:dev
This project was originally a part of MDG's Todos example Meteor app, but later extracted as a separate test package.
Based on https://github.com/stubailo/meteor-rest/blob/devel/packages/rest/http-subscription.js.
1.0.10
- Always stop the publication when an error is thrown in the PublicationCollector callback. Thanks @SimonSimCity !1.0.9
- Fix bug in 1.0.8 regarding empty array return. Thanks @nkahnfr !1.0.8
- Fix support for publications returning nothing (an empty array). Thanks @ziedmahdi !1.0.7
- Fix compatibility withpeerlibrary:reactive-publish
's_isDeactivated
function in publications (#20, thanks @jaskinn!).1.0.6
- Fix an issue with "ready" event being emitted more than once (#16). Thanks @nkahnfr!1.0.5
- Fix an issue when publish handlers are using default arguments (#15). Thanks @dmihal!1.0.4
- Don't try to operate on a document that doesn't exist inchanged
callback. Thanks @zenweasel, from #13!1.0.3
- Fix compatibility withpeerlibrary:reactive-publish
package (bug #3), fixed in #10. Thanks @hexsprite!1.0.2
- Fix bug whereready()
wasn't called if there were no results from a publication handler.1.0.1
1.0.0
- First public release.
- Make tests pass.
- More docs.
- Support Promises.