控制器使用Jasmine和Typescript进行测试

时间:2016-02-04 19:23:40

标签: angularjs typescript jasmine

我收到以下错误

Expected 0 to be 4.
    ...anggen/app/products/products.list.controller.spec.js:22:35

有谁可以告诉我为什么httpbackend没有返回响应?还是我错过了傻事?花了很多时间让它上班,我被卡住了.. 请看下面的测试用例。有问题的测试是它(“应该创建控制器”...测试 我的控制器代码如下......

module app.productList {
  'use strict';

  export interface IProductListModel {
    title: string;
    showImage: Boolean;
    products: app.domain.IProduct[];
    toggleImage(): void;
    addNumbers(firstNumber:number, secondNumber:number): number;
  }

  export class ProductListCtrl implements IProductListModel {

    title:string;
    showImage:boolean;
    products:app.domain.IProduct[];

    static $inject = ["dataAccessService"];  // for minification
    constructor(private dataAccessService:app.productService.DataAccessService) {
      this.title = "Product List";
      this.showImage = false;
      this.products = [];
      dataAccessService.getProductResource().query((data:app.domain.IProduct[]) => {
        this.products = data;
      });
    }

    public toggleImage():void {
      this.showImage = !this.showImage;
    }

    public addNumbers(firstNumber:number, secondNumber:number) {
      return firstNumber + secondNumber;
    }

  }

  angular.module("app.products").controller("ProductListCtrl", ProductListCtrl)
}

我的服务代码如下......

module app.productService {
  export interface IDataAccessService {
    getProductResource(): ng.resource.IResourceClass<IProductResource>;
    getProductResourceDetails(): ng.resource.IResourceClass<IProductResource>;
  }

  export interface IProductResource extends ng.resource.IResource<app.domain.IProduct> {
  }

  export class DataAccessService
    implements IDataAccessService {

    // for minification.
    static $inject = ["$resource"];
    constructor(private $resource: ng.resource.IResourceService) {

    }

    getProductResource(): ng.resource.IResourceClass<IProductResource> {
      //return this.$resource("/api/products/:productId");
      return this.$resource("http://localhost:9998/generic/products");
    }

  }

  angular
    .module("app.products")
    .service("dataAccessService", DataAccessService);
}

我的测试代码如下......

describe("Product List Controller", function () {

  var controller: app.productList.ProductListCtrl;
  var dataAccessService: app.productService.DataAccessService;
  var $httpBackend : ng.IHttpBackendService;

  beforeEach(function () {
    angular.mock.module("productManagement");
  });

  beforeEach(inject(function (
    $rootScope: ng.IRootScopeService,
    _$httpBackend_: ng.IHttpBackendService,
    _dataAccessService_: app.productService.DataAccessService) {
    dataAccessService=_dataAccessService_;
    $httpBackend=_$httpBackend_;
  }));


  it("should create controller", () => {
    $httpBackend.expectGET("http://localhost:9998/generic/products").respond([
      {"id": "1", "name": "Pizza Vegetaria", "price": 5 },
      {"id": "2", "name": "Pizza Salami",    "price": 5.5 },
      {"id": "3", "name": "Pizza Thunfisch", "price": 6 },
      {"id": "4", "name": "Aktueller Flyer", "price": 0 }
    ]);

    controller = new app.productList.ProductListCtrl(dataAccessService);
    expect(controller).not.toBeNull();

    var result = controller.products;
    expect(result.length).toBe(4);
    $httpBackend.flush();
  });


});

0 个答案:

没有答案