fakecouch
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

Fake CouchDB Testing Tool

A fake CouchDB server for testing.

npm Build status Test coverage Buy me a beer

Disclaimer: This is a fake CouchDB server which implements endpoints used in common applications. It does not claim to be use as a regular CouchDB server. It uses some static data as result for some database requests.

Install

npm install -D fakecouch

Usage

const supertest = require('supertest');
const FakeCouchServer = require('fakecouch');

const couch = new FakeCouchServer({
  port: 5984,
  logger: false,
});

const api = supertest('<endpoint of my awesome API server>');

describe('My Awesome API Tests', () => {
  beforeAll(() => {
    couch.setup();
    couch.authenticate();
  });

  afterAll(() => couch.reset());

  it('HEAD /api/awesome/resource', () => {
    return api.head('/api/awesome/resource').expect(404)
      .then(() => api.put('/api/awesome/resource').expect(201))
      .then(() => api.head('/api/awesome/resource').expect(200));
  });
});

Enable CORS using options.headers

const FakeCouchServer = require('fakecouch');

const couch = new FakeCouchServer({
  port: 5984,
  logger: false,
  headers: {
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
  },
});

Fake CouchDB API

type Options = {
  port?: number;
  logger?: boolean;
  headers?: Record<string, string>;
};

declare class Server {
  readonly serveUrl: string;
  readonly serverPort: number;
  readonly headers: Record<string, string>;
  readonly databases: Record<string, IFakeCouch.Database>;

  constructor({ port = 5984, logger = false }: Options);

  setup(): void;
  reset(): void;
  authenticate(): void;
  addDatabase(dbname: string): IFakeCouch.Database;
}

declare class Database {
  readonly name: string;
  readonly docs: Record<string, IFakeCouch.DocumentRef>;
  readonly localDocs: Record<string, IFakeCouch.DocumentRef>;
  readonly designs: Record<string, IFakeCouch.DocumentRef>;
  readonly indexes: IFakeCouch.IndexDefinition[];
  readonly security: Record<'admins' | 'members', IFakeCouch.SecurityObject>;
  readonly revisionLimit: number;

  addDoc(doc: Document, docid?: string): IFakeCouch.DocumentRef;
  addDocs(docs: Document[]): void;

  addIndex(index: Index): IFakeCouch.IndexDefinition;
  deleteIndex(ddoc: string, indexName: string): boolean;

  addDesign(ddoc: IFakeCouch.DesignDocument): IFakeCouch.DocumentRef;
  hasDesign(ddocid: string): boolean;
  deleteDesign(ddocid: string): void;
}

See typings/IFakeCouch.d.ts for the comple API interfaces.

License

Under the MIT license. See LICENSE file for more details.

Package Sidebar

Install

npm i fakecouch

Weekly Downloads

3

Version

1.2.0

License

MIT

Unpacked Size

160 kB

Total Files

9

Last publish

Collaborators

  • demsking