All Projects → johanbrook → meteor-publication-collector

johanbrook / meteor-publication-collector

Licence: MIT License
Test a Meteor publication by collecting its output.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to meteor-publication-collector

fragments
Organise your bookmarks into boards
Stars: ✭ 56 (+75%)
Mutual labels:  meteor
meteor-postcss
PostCSS for Meteor
Stars: ✭ 68 (+112.5%)
Mutual labels:  meteor
meteor-google-spreadsheets
Google Spreadsheets for Meteor
Stars: ✭ 53 (+65.63%)
Mutual labels:  meteor
latelier
L'atelier, a project management tool
Stars: ✭ 74 (+131.25%)
Mutual labels:  meteor
meteor-stat
Get a simple analysis of your Meteor app
Stars: ✭ 22 (-31.25%)
Mutual labels:  meteor
svelte-meteor-data
Reactively track Meteor data inside Svelte components
Stars: ✭ 14 (-56.25%)
Mutual labels:  meteor
accounts-react
Simple and intuative accounts view layer for react in meteor
Stars: ✭ 51 (+59.38%)
Mutual labels:  meteor
meteor-presence
👥 Meteor package to help track users' presence
Stars: ✭ 88 (+175%)
Mutual labels:  meteor
meteor-flow-router-map
Meteor package for Flow Router
Stars: ✭ 15 (-53.12%)
Mutual labels:  meteor
create-book
⚡️ Fast & frictionless book template generator.
Stars: ✭ 22 (-31.25%)
Mutual labels:  publication
meteor-bootstrap-tagsinput
Bootstrap Tags Input packaged for Meteor Platform
Stars: ✭ 12 (-62.5%)
Mutual labels:  meteor
Meteor-logger
🧾 Meteor isomorphic logger. Store application logs in File (FS), MongoDB, or print in Console
Stars: ✭ 51 (+59.38%)
Mutual labels:  meteor
Dermatron
Dermatology focused medical records software, augmented with computer vision and artificial intelligence [Meteor packaged with Electron]
Stars: ✭ 19 (-40.62%)
Mutual labels:  meteor
meteor-server-autorun
Server-side Tracker.autorun
Stars: ✭ 36 (+12.5%)
Mutual labels:  meteor
Meteor-Remember-Me
Meteor accounts extension with remember me functionality
Stars: ✭ 13 (-59.37%)
Mutual labels:  meteor
meteor-apollo2
An example showing how to use Apollo 2.0 with GraphQL server + subscriptions
Stars: ✭ 20 (-37.5%)
Mutual labels:  meteor
meteor-vuetify
Experimenting with using Vuetify on a Meteor project.
Stars: ✭ 18 (-43.75%)
Mutual labels:  meteor
blaze-magic-events
A new way of binding event handlers to html elements for Meteor's Blaze.
Stars: ✭ 26 (-18.75%)
Mutual labels:  meteor
polytunes
An collaborative music game using Meteor and Web Audio
Stars: ✭ 23 (-28.12%)
Mutual labels:  meteor
CNN-SoilTextureClassification
1-dimensional convolutional neural networks (CNN) for the classification of soil texture based on hyperspectral data
Stars: ✭ 35 (+9.38%)
Mutual labels:  publication

Publication Collector

CircleCI

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.

Installation

meteor add johanbrook:publication-collector

Usage

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();
    });
  });
});

PublicationCollector

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

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.

collector.collect('myPublication', firstPublicationArg, secondPublicationArg, (collections) => {
  assert.equal(collections.myCollection.length, 10);
});

or use Promises:

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 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.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).
  • 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, 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 in changed callback. Thanks @zenweasel, from #13!
  • 1.0.3 - Fix compatibility with peerlibrary:reactive-publish package (bug #3), fixed in #10. Thanks @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).
    • Return an empty array if there are no returned documents from a publication (#5).
    • Accept Mongo.ObjectID as _id attribute (#8).
  • 1.0.0 - First public release.

To do

  • Make tests pass.
  • More docs.
  • Support Promises.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].