fsd

falcor-supertest-datasource

A Falcor DataSource class for easily testing Falcor-Router Express routes using SuperTest

Showing:

Popularity

Downloads/wk

6

GitHub Stars

2

Maintenance

Last Commit

5yrs ago

Contributors

0

Package

Dependencies

2

Size (min+gzip)

35.1KB

License

ISC

Type Definitions

Tree-Shakeable

No?

Categories

Readme

Falcor SuperTest DataSource

Build Status

A Falcor DataSource class for testing Falcor routes using SuperTest.

Testing with a Falcor Model has a few added benefits over testing w/ direct HTTP requests:

  • requests are made using Falcor's path syntax, rather than the equivalent HTTP queryparams/request body
  • responses are equivalent to what the client receives, e.g. by resolving refs
  • enables tests against the model cache, e.g. ensuring that paths are properly invalidated after a call request

Testing against a Falcor Model will not test for overfetching or underfetching. E.g. if a route accidentally returns more data than it should, the extra data will be dropped silently by the Falcor Model. Similarly, if a route returns less data than it should, the model will silently make a subsequent request in order to finish building the jsonGraph snippet. Testing against a Falcor Model will ensure that the client eventually receives all the data it needs (just not necessarily as efficiently as possible).

Basic Usage

const falcor = require('falcor');
const test = require('some test framework like tape');
const SuperTestDataSource = require('falcor-supertest-datasource');
const app = require('./app');

const model = new falcor.Model({
  source: new SuperTestDataSource('/api/model.json', app)
});

test('Should return items by id with field1 and field2', assert => {
  const expectedResponse = {
    itemsById: {
      1: {field1: 'someValue', field2: 'someOtherValue'},
      3: {field1: 'someValue', field2: 'someOtherValue'},
      4: {field1: 'someValue', field2: 'someOtherValue'}
    }
  };

  model.get(['itemsById', [1, 3, 4], ['field1', 'field2']])
    .subscribe(res => {
      assert.deepEqual(res.json, expectedResponse);
    }, err => {
      assert.fail(err);
    });
});

Advanced Usage

Take a look at test/index.js, which is set up to run against a sample express/falcor-router app in example/example-router/. The app runs against an in-memory SQLite DB, and is reinitialized for each test, ensuring all tests run in isolation against a fresh app state.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100