Creating NPM module with Typescript and Jest

Overview

As part of having a look into learning typescript to see if it would be a good move for work I thought I would also learn Jest and also build something I wanted.

Goal

My goal is to create an NPM module for the fantasy premier league which tracks the English Premier League and assigns points depending on which players you pick.

Typescript + Jest

This was surprisingly easy to set up. The main issue I had was with mocking imports.

Solution

After some fiddling about I managed to get this working

//url-call.ts
import {get} from 'request-promise';
import {Constants} from '../constants'

export default class UrlCall{
    private url:string;

    constructor(path: string) {
        this.url = Constants.BASE_URL+path;
    }

    sendMessage():Promise<any>{
        return get(this.url);
    }
}
//url-call.test.ts
import UrlCall from './url-call';
jest.mock('request-promise');
import * as requestPromise from 'request-promise';


test('send message returns some data', () => {
    expect.assertions(1);
    requestPromise.get.mockImplementation(()=> Promise.resolve('w00t'));
    const urlCall = new UrlCall('elements/');
    urlCall.sendMessage()
           .then(result => expect(result).toBe('w00t'));
})

test('fail sending message', () => {
    const error = new Error('some error');
    requestPromise.get.mockImplementation(()=> Promise.reject(error));
    expect.assertions(1);
    const urlCall = new UrlCall('elements/');
    urlCall.sendMessage()
           .catch(error => {
            expect(error).toBe(error);       
           })

})

I hope this helps :)

Full code is here: https://github.com/TheSmokingGnu/fantasy-premier-league

Next steps

Finish the implementation and continue testing

comments powered by Disqus