Skip to content

Commit

Permalink
feat(context): Support string expectations.
Browse files Browse the repository at this point in the history
  • Loading branch information
cartant committed Jul 24, 2017
1 parent eaa6199 commit 99fc0df
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 10 deletions.
19 changes: 19 additions & 0 deletions fixtures/mocha/passing-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,23 @@ describe("rxjs-marbles", () => {
m.expect(destination).toBeObservable(expected);
m.expect(source).toHaveSubscriptions(subs);
}));

it("should support string-based assertions", marbles((m) => {

const values = {
a: 1,
b: 2,
c: 3,
d: 4
};

const source = m.hot("--^-a-b-c-|", values);
const subs = "^-------!";
const expected = "--b-c-d-|";

const destination = source.map((value) => value + 1);

m.expect(destination).toBeObservable(expected, values);
m.expect(source).toHaveSubscriptions(subs);
}));
});
21 changes: 21 additions & 0 deletions fixtures/tape/passing-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,24 @@ tape("it should support marble tests with terse assertions", marbles((m, t) => {
m.equal(destination, expected);
m.has(source, subs);
}));

tape("it should support string-based assertions", marbles((m, t) => {

t.plan(2);

const values = {
a: 1,
b: 2,
c: 3,
d: 4
};

const source = m.hot("--^-a-b-c-|", values);
const subs = "^-------!";
const expected = "--b-c-d-|";

const destination = source.map((value) => value + 1);

m.equal(destination, expected, values);
m.has(source, subs);
}));
20 changes: 15 additions & 5 deletions source/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,23 @@ export class Context {
return observable;
}

equal<T = any>(actual: Observable<T>, expected: Observable<T>): void {

assertArgs(expected);
equal<T = any>(actual: Observable<T>, expected: Observable<T>): void;
equal<T = any>(actual: Observable<T>, expected: string, values?: { [key: string]: T }, error?: any): void;
equal<T = any>(actual: Observable<T>, expected: Observable<T> | string, values?: { [key: string]: T }, error?: any): void {

const { testScheduler } = this;
const { error, marbles, values } = expected[argsSymbol];
testScheduler.expectObservable(actual).toBe(marbles, values, error);

if (typeof expected === "string") {

testScheduler.expectObservable(actual).toBe(expected, values, error);

} else {

assertArgs(expected);

const { error, marbles, values } = expected[argsSymbol];
testScheduler.expectObservable(actual).toBe(marbles, values, error);
}
}

expect<T = any>(actual: Observable<T>): Expect<T> {
Expand Down
20 changes: 15 additions & 5 deletions source/expect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,23 @@ export class Expect<T> {

constructor(private actual: ColdObservable<T> | HotObservable<T>, private testScheduler: TestScheduler) {}

toBeObservable(expected: ColdObservable<T> | HotObservable<T>): void {

assertArgs(expected);
toBeObservable(expected: ColdObservable<T> | HotObservable<T>): void;
toBeObservable(expected: string, values?: { [key: string]: T }, error?: any): void;
toBeObservable(expected: ColdObservable<T> | HotObservable<T> | string, values?: { [key: string]: T }, error?: any): void {

const { actual, testScheduler } = this;
const { error, marbles, values } = expected[argsSymbol];
testScheduler.expectObservable(actual).toBe(marbles, values, error);

if (typeof expected === "string") {

testScheduler.expectObservable(actual).toBe(expected, values, error);

} else {

assertArgs(expected);

const { error, marbles, values } = expected[argsSymbol];
testScheduler.expectObservable(actual).toBe(marbles, values, error);
}
}

toHaveSubscriptions(expected: string | string[]): void {
Expand Down

0 comments on commit 99fc0df

Please sign in to comment.