jeudi 25 août 2016

Testing Angular2 with Jasmine. Class property not being set

I am currently writing tests for my Angular2 (with Typescript) application and all has been fine and dandy so far, that is until I have attempted to start testing one of my services.

This service has the Angular2 Http module injected on instantiation as shown below:

import { Injectable, EventEmitter } from 'angular2/core';
import { Http } from 'angular2/http';
import 'rxjs/add/operator/map';

import { ConfigObject } from '../ConfigObject';

import { HTTPHelper } from '../helpers/HTTPHelper';

import { Category } from '../classes/Category';


@Injectable()
export class CategoryService {
    public emitter: EventEmitter<Category>;

    constructor(private _http: Http) {
        this.emitter = new EventEmitter();
    }

    private APIUrl = ConfigObject.productBox + ConfigObject.apiVersion + 'category';
    getCategories(filters) {
        return this._http.get(this.APIUrl + HTTPHelper.convertVarsToString(filters))
            .map(res => res.json());
    }

    public emitCat(category): void {
        this.emitter.emit(category);
    }
}

This is then used to make GET requests to an API box I have created. Here is my Jasmine test spec file for the service:

import { CategoryService } from '../../services/category.service';
import { Http } from 'angular2/http';

describe('Category service', () => {
    let testCategoryService: CategoryService;
    let _http: Http;

    beforeEach(function() {
        testCategoryService = new CategoryService(Http);
    });

    it('should have emitter name set', () => {
        expect(testCategoryService.emitter._isScalar).toBeDefined();
    });

    it('should return categories', () => {
        testCategoryService.getCategories({
            order           : 'asc',
            order_by        : 'name',
            parent_id       : 0,
        });
    });
});

As you can see, am including the Http object here too and injecting it into the test instantiation of my service class before each test on this line:

beforeEach(function() {
        testCategoryService = new CategoryService(Http);
    });

When I try and test the 'getCategories' function on my service class I get the following error:

TypeError: this._http.get is not a function

Which is odd as as far as I am concerned I am injecting the Http service into my test instantiation on the line above so this should be set in the class constructor?

Can anyone see why the Http object in my class is not being set?

Thanks

Aucun commentaire:

Enregistrer un commentaire