Skip to content

Some ES6 Promise-based helper functions to facilitate writing asynchronous tests in Jasmine

Notifications You must be signed in to change notification settings

jasonmevans/async-test-helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

async-test-helper

I decided to write this little package to help me out when I was writing some Jasmine tests for a bit of asynchronous code I was working on. I noticed that Jasmine had removed the old runs and waitsFor functions from the API, and I found myself writing the same Promise code over and over. The functions within this library attempt to achieve similar async syntactic sugar to make writing async test cases a bit easier, and less verbose.

Note: There may be a better way to do this, so feel free to share insights into better implementations. Sharing new ideas is what it's all about!

Getting Started

Install the package (sorry not on NPM, yet)

npm install --save-dev git+https://github.com/jasonmevans/async-test-helper.git

Import the package

import { startWith, waitFor, doThis } from 'async-test-helper';

Usage

To get started, you can use startWith to provide an initial task:

startWith(() => {
  // some initial code to start things with
})
.then(...);

This function isn't actually required. You could alternately begin with the waitFor function, but the syntax would be a little weird because of the function waitFor returns (startWith lubricates the flow a tad):

waitFor(() => {
  return n == 4; // your condition to wait for
})()
.then(...);

Notice the extra () after the call to waitFor. The startWith function simply lets you write tests that read more like English. By starting with startWith you can just throw a waitFor into the chained then (no need for extra parens because then expects to receive a function):

startWith(() => {
  ...
})
.then(waitFor(() => {
  return n == 4;
}));

So what happens next? That's where doThis comes into play:

var n = 0;
startWith(() => {
  window.setInterval(() => { n++; }, 250);
})
.then(waitFor(() => {
  return n == 4;
}))
.then(doThis(() => {
  expect(n).toBe(4);
}));

The nice thing about the waitFor function being built upon a Promise is that you can create more complex sequences by simply chaining more calls to then:

var n = 0;
startWith(() => {
  window.setInterval(() => { n++; }, 250);
})
.then(waitFor(() => {
  return n == 4;
}))
.then(doThis(() => {
  expect(n).toBe(4);
}))
.then(waitFor(() => {
  return n == 8;
}))
.then(doThis(() => {
  expect(n).toBe(8);
}));

About

Some ES6 Promise-based helper functions to facilitate writing asynchronous tests in Jasmine

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published