项目作者: arielshaqed

项目描述 :
Ava macros to test RxJS
高级语言: TypeScript
项目地址: git://github.com/arielshaqed/kurkar.git
创建时间: 2019-02-18T12:29:24Z
项目社区:https://github.com/arielshaqed/kurkar

开源协议:MIT License

下载


Build status on Cirrus
Build status on GitHub Actions

Kurkar: Ava macros to test RxJS

Kurkar helps you test RxJS operators and pipelines with
marbles using Ava. Ava macros let you write concise
tests.

Install

  1. npm install --save-dev kurkar

Basic usage

  1. import test from 'ava';
  2. import marbles from 'kurkar';
  3. test('observable', marbles, (_t, _sched, helpers) => {
  4. const letters = 'the quick brown fox jumps over the lazy dog|';
  5. const source$ = helpers.hot(letters);
  6. helpers.expectObservable(source$).toBe(letters);
  7. });

Kurkar provides an Ava test macro to easily set up RxJS
tests in Ava. Include the macro function marbles before the test
function to hook up an RxJS TestScheduler to the
Ava execution context “t“. The test function will be run inside a
test scheduler, with these parameters:

  • t: Ava execution context for this test.
  • sched: RxJS TestScheduler running this test. Use when you need
    to pass a scheduler argument into some operators.
  • helpers: Helper functions created by
    TestScheduler.run for easily creating and
    comparing Observables.

TestScheduler runs synchronously, so the test function is not
async.

The marbles macro uses t.deepEqual to compare actual and expected
results. Pass a different comparison function to withEquals to
generate other versions of the macro. marbles is just

  1. const marbles = withEquals((t, a, e) => t.deepEqual(a, e));

TypeScript support

Kurkar fully supports TypeScript types and exports useful types. You
do not need to install additional @types to enjoy TypeScript.

Here’s a typed version of the above test:

  1. import test from 'ava';
  2. import marbles, { withEquals, ExecutionContext, TestScheduler, RunHelpers } from 'kurkar';
  3. test('observable', marbles, (_t: ExecutionContext, _sched: TestScheduler, helpers: RunHelpers) => {
  4. const letters = 'the quick brown fox jumps over the lazy dog|';
  5. const source$ = helpers.hot(letters);
  6. helpers.expectObservable(source$).toBe(letters);
  7. });

Due to current limitations with Ava types, TypeScript language servers
currently cannot always deduce the types of the test function parameters.

FAQ

Why another Ava RxJS marbles library?

Because it provides an Ava test macro, Kurkar removes the most
boilerplate from your tests. It is native TypeScript and can provide
exact type-checking.

Why the name?

“Kurkar” (“כורכר”) is a soft middle-eastern sandstone — a very different rock from marble.

What are all these other names?

  • Ava: A JavaScript and TypeScript test runner.
  • RxJS: A library for composing asynchronous and event-based
    programs by using observable sequences.
  • Marbles: Diagram-based testing of RxJS operators and pipelines.

Build Status