https://github.com/meteor-community-packages/meteor-publication-collector
Test a Meteor publication by collecting its output.
https://github.com/meteor-community-packages/meteor-publication-collector
meteor publication testing
Last synced: 4 months ago
JSON representation
Test a Meteor publication by collecting its output.
- Host: GitHub
- URL: https://github.com/meteor-community-packages/meteor-publication-collector
- Owner: Meteor-Community-Packages
- License: mit
- Created: 2016-05-21T04:52:49.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-06-04T06:49:45.000Z (over 1 year ago)
- Last Synced: 2024-06-04T07:57:55.079Z (over 1 year ago)
- Topics: meteor, publication, testing
- Language: JavaScript
- Homepage: https://atmospherejs.com/johanbrook/publication-collector
- Size: 93.8 KB
- Stars: 33
- Watchers: 3
- Forks: 19
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Publication Collector
[]()
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.
- [Publication Collector](#publication-collector)
- [Installation](#installation)
- [Usage](#usage)
- [PublicationCollector](#publicationcollector)
- [PublicationCollector.collect](#publicationcollectorcollect)
- [Development](#development)
- [Tests](#tests)
- [History](#history)
- [Releases](#releases)
- [To do](#to-do)## Installation
```
meteor add johanbrook:publication-collector
```## Usage
This package is server-only and can't be imported on the client.
```js
// server/myPublication.test.jsimport { 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();
}
);
});
});
```### PublicationCollector
```js
const collector = new PublicationCollector(opts);
````opts` may have the following attributes:
- `userId`: Add a `this.userId` to the publication's context
- `delayInMs`: By default, `collect` callbacks are called when the publication is ready. If you use this option, the callbacks will be called `delayInMs` 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.
### PublicationCollector.collect -> Promise
```js
collector.collect(publicationName, [publicationArgs..., callback]);
```- `publicationName (String)`: the name of the publication (String)
- `publicationArgs`: zero or more arguments to the publication
- `callback (Function)`: Optional. The function to be called when the publication is ready. Will be called with a `collections` object.Returns a Promise which resolves to a `collections` object.
The `collections` value is an 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.
```js
collector.collect(
"myPublication",
firstPublicationArg,
secondPublicationArg,
(collections) => {
assert.equal(collections.myCollection.length, 10);
}
);
```or use Promises:
```js
const collector = new PublicationCollector();collector.collect('myPublication')
.then(collections => {
// assertions..
})
.catch(ex => /* error handling */);// Or async/await style
const collections = await collector.collect('myPublication');
// assertions..
```## Development
```
npm install
```Follow `.eslintrc`
### Tests
Run tests once with
```
npm test
```Run tests in watch mode (in console) with
```
npm run test:dev
```## History
This project was originally a part of MDG's [Todos](https://github.com/meteor/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.
## Releases
- `1.2.0`
- Add support for async publication
- `1.1.0`
- Pin versions to Meteor@>=1.3.
- Throw error when there's no publication for the provided name.
- Upgrade dependencies.
- Add support for Promises in the `.collect()` method. **Note:** This breaks tests that rely on errors being thrown in the `collect()` method (see [#36](https://github.com/johanbrook/meteor-publication-collector/issues/36)).
- `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 with `peerlibrary:reactive-publish`'s `_isDeactivated` function in publications ([#20](https://github.com/johanbrook/meteor-publication-collector/pull/23), thanks @jaskinn!).
- `1.0.6` - Fix an issue with "ready" event being emitted more than once ([#16](https://github.com/johanbrook/meteor-publication-collector/pull/16)). Thanks @nkahnfr!
- `1.0.5` - Fix an issue when publish handlers are using default arguments ([#15](https://github.com/johanbrook/meteor-publication-collector/pull/15)). Thanks @dmihal!
- `1.0.4` - Don't try to operate on a document that doesn't exist in `changed` callback. Thanks @zenweasel, from [#13](https://github.com/johanbrook/meteor-publication-collector/pull/13)!
- `1.0.3` - Fix compatibility with `peerlibrary:reactive-publish` package (bug #3), fixed in [#10](https://github.com/johanbrook/meteor-publication-collector/pull/10). Thanks [@hexsprite](https://github.com/hexsprite)!
- `1.0.2` - Fix bug where `ready()` wasn't called if there were no results from a publication handler.
- `1.0.1`
- Fixes inconsistent results from publication collector (thanks @PhilippSpo in [#2](https://github.com/johanbrook/meteor-publication-collector/issues/2)).
- Return an empty array if there are no returned documents from a publication ([#5](https://github.com/johanbrook/meteor-publication-collector/issues/5)).
- Accept `Mongo.ObjectID` as `_id` attribute ([#8](https://github.com/johanbrook/meteor-publication-collector/issues/8)).
- `1.0.0` - First public release.## To do
- [x] Make tests pass.
- [x] More docs.
- [ ] Support Promises.## Credits
This package has originally been ideated and created by [Johan Brook](https://github.com/johanbrook).