Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Angular 2单元测试:全局声明HTTP模拟_Unit Testing_Angular_Karma Jasmine - Fatal编程技术网

Unit testing Angular 2单元测试:全局声明HTTP模拟

Unit testing Angular 2单元测试:全局声明HTTP模拟,unit-testing,angular,karma-jasmine,Unit Testing,Angular,Karma Jasmine,我用angular 2编写测试用例。我想知道下面的事情是如何完成的。请帮帮我 如何全局定义模拟(Http、路由器) 如何在每个测试用例中调用common beforeach() 我的代码,我想共同的 普通。ts /* this used for route Mocking * */ let mockRouter = { navigate: jasmine.createSpy('navigate') } /* * Response Url * */

我用angular 2编写测试用例。我想知道下面的事情是如何完成的。请帮帮我

  • 如何全局定义模拟(Http、路由器)
  • 如何在每个测试用例中调用common beforeach()
我的代码,我想共同的

普通。ts

  /* this used for route Mocking
   * */
  let mockRouter = {
    navigate: jasmine.createSpy('navigate')
  }
  /*
   *  Response Url
   * */
  let metaUrl = {
    LOGIN: '/operator/login',
    META_API: '/meta-api'
  };

  let subject:GlobalUtils = null;
  let backend:MockBackend = null;
  let http:Http = null;
  /*
   *  The beforeEach function is called once before each spec in the describe in which it is called
   * */
  beforeEach(()=>TestBed.configureTestingModule({

    providers: [
      GlobalUtils,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Router, useValue: mockRouter
      },
      {
        provide: Http,
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      },
    ]
  }));

  beforeEach(inject([GlobalUtils, MockBackend, Http], (_globalUtils:GlobalUtils, mockBackend:MockBackend, _http:Http) => {
    subject = _globalUtils;
    backend = mockBackend;
    http = _http;
  }));
import {Http, BaseRequestOptions, Response, ResponseOptions, ConnectionBackend} from '@angular/http';
import {MockBackend, MockConnection} from '@angular/http/testing';
import {Router} from '@angular/router';
import {TestBed, inject} from '@angular/core/testing';
import {GlobalUtils} from '../global.utils.ts';
import { Constant } from '../constant'

describe('Global Utils : Meta urls API', () => {

  /* this used for route Mocking
   * */
  let mockRouter = {
    navigate: jasmine.createSpy('navigate')
  }
  /*
   *  Response Url
   * */
  let metaUrl = {
    LOGIN: '/operator/login',
    META_API: '/meta-api'
  };

  let subject:GlobalUtils = null;
  let backend:MockBackend = null;
  let http:Http = null;
  /*
   *  The beforeEach function is called once before each spec in the describe in which it is called
   * */
  beforeEach(()=>TestBed.configureTestingModule({

    providers: [
      GlobalUtils,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Router, useValue: mockRouter
      },
      {
        provide: Http,
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      },
    ]
  }));

  beforeEach(inject([GlobalUtils, MockBackend, Http], (_globalUtils:GlobalUtils, mockBackend:MockBackend, _http:Http) => {
    subject = _globalUtils;
    backend = mockBackend;
    http = _http;
  }));

  /*
  * This Test case is check Response of getMetaUrls function
  * getMetaUrls must return response
  * */
  it('Should have get Meta urls', (done) => {
    // HTTP Mocking
    backend.connections.subscribe((connection:MockConnection)=> {
      let options = new ResponseOptions({
        body: JSON.stringify(metaUrl),status: 200
      });
      connection.mockRespond(new Response(options));
    });
    /*
     * we mock http get method
     * */
    http
      .get(Constant.metaUrl)
      .subscribe((response) => {
        subject.getMetaUrls();
        expect(Constant.saveUrl).toEqual(metaUrl);
        done();
      });

  });

  /*
  * This Test case is check empty response and redirect to error page
  * getMetaUrls must return empty response
  * */
  it('Should have get Empty Meta urls data', (done) => {
    backend.connections.subscribe((connection:MockConnection)=> {
      let options = new ResponseOptions({
        body: JSON.stringify(''), status: 200
      });
      connection.mockRespond(new Response(options));
    });

    http
      .get(Constant.metaUrl)
      .subscribe((response) => {
        subject.getMetaUrls();
        expect(mockRouter.navigate).toHaveBeenCalledWith(['page-error']);
        done();
      });
  });
describe('Authentication test',()=>{

});
这背后的原因我在另一个spec.ts文件中为编写测试用例提供了这一点

这是我的spec.ts文件

1.规格ts

  /* this used for route Mocking
   * */
  let mockRouter = {
    navigate: jasmine.createSpy('navigate')
  }
  /*
   *  Response Url
   * */
  let metaUrl = {
    LOGIN: '/operator/login',
    META_API: '/meta-api'
  };

  let subject:GlobalUtils = null;
  let backend:MockBackend = null;
  let http:Http = null;
  /*
   *  The beforeEach function is called once before each spec in the describe in which it is called
   * */
  beforeEach(()=>TestBed.configureTestingModule({

    providers: [
      GlobalUtils,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Router, useValue: mockRouter
      },
      {
        provide: Http,
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      },
    ]
  }));

  beforeEach(inject([GlobalUtils, MockBackend, Http], (_globalUtils:GlobalUtils, mockBackend:MockBackend, _http:Http) => {
    subject = _globalUtils;
    backend = mockBackend;
    http = _http;
  }));
import {Http, BaseRequestOptions, Response, ResponseOptions, ConnectionBackend} from '@angular/http';
import {MockBackend, MockConnection} from '@angular/http/testing';
import {Router} from '@angular/router';
import {TestBed, inject} from '@angular/core/testing';
import {GlobalUtils} from '../global.utils.ts';
import { Constant } from '../constant'

describe('Global Utils : Meta urls API', () => {

  /* this used for route Mocking
   * */
  let mockRouter = {
    navigate: jasmine.createSpy('navigate')
  }
  /*
   *  Response Url
   * */
  let metaUrl = {
    LOGIN: '/operator/login',
    META_API: '/meta-api'
  };

  let subject:GlobalUtils = null;
  let backend:MockBackend = null;
  let http:Http = null;
  /*
   *  The beforeEach function is called once before each spec in the describe in which it is called
   * */
  beforeEach(()=>TestBed.configureTestingModule({

    providers: [
      GlobalUtils,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Router, useValue: mockRouter
      },
      {
        provide: Http,
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      },
    ]
  }));

  beforeEach(inject([GlobalUtils, MockBackend, Http], (_globalUtils:GlobalUtils, mockBackend:MockBackend, _http:Http) => {
    subject = _globalUtils;
    backend = mockBackend;
    http = _http;
  }));

  /*
  * This Test case is check Response of getMetaUrls function
  * getMetaUrls must return response
  * */
  it('Should have get Meta urls', (done) => {
    // HTTP Mocking
    backend.connections.subscribe((connection:MockConnection)=> {
      let options = new ResponseOptions({
        body: JSON.stringify(metaUrl),status: 200
      });
      connection.mockRespond(new Response(options));
    });
    /*
     * we mock http get method
     * */
    http
      .get(Constant.metaUrl)
      .subscribe((response) => {
        subject.getMetaUrls();
        expect(Constant.saveUrl).toEqual(metaUrl);
        done();
      });

  });

  /*
  * This Test case is check empty response and redirect to error page
  * getMetaUrls must return empty response
  * */
  it('Should have get Empty Meta urls data', (done) => {
    backend.connections.subscribe((connection:MockConnection)=> {
      let options = new ResponseOptions({
        body: JSON.stringify(''), status: 200
      });
      connection.mockRespond(new Response(options));
    });

    http
      .get(Constant.metaUrl)
      .subscribe((response) => {
        subject.getMetaUrls();
        expect(mockRouter.navigate).toHaveBeenCalledWith(['page-error']);
        done();
      });
  });
describe('Authentication test',()=>{

});
2.spec.ts

  /* this used for route Mocking
   * */
  let mockRouter = {
    navigate: jasmine.createSpy('navigate')
  }
  /*
   *  Response Url
   * */
  let metaUrl = {
    LOGIN: '/operator/login',
    META_API: '/meta-api'
  };

  let subject:GlobalUtils = null;
  let backend:MockBackend = null;
  let http:Http = null;
  /*
   *  The beforeEach function is called once before each spec in the describe in which it is called
   * */
  beforeEach(()=>TestBed.configureTestingModule({

    providers: [
      GlobalUtils,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Router, useValue: mockRouter
      },
      {
        provide: Http,
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      },
    ]
  }));

  beforeEach(inject([GlobalUtils, MockBackend, Http], (_globalUtils:GlobalUtils, mockBackend:MockBackend, _http:Http) => {
    subject = _globalUtils;
    backend = mockBackend;
    http = _http;
  }));
import {Http, BaseRequestOptions, Response, ResponseOptions, ConnectionBackend} from '@angular/http';
import {MockBackend, MockConnection} from '@angular/http/testing';
import {Router} from '@angular/router';
import {TestBed, inject} from '@angular/core/testing';
import {GlobalUtils} from '../global.utils.ts';
import { Constant } from '../constant'

describe('Global Utils : Meta urls API', () => {

  /* this used for route Mocking
   * */
  let mockRouter = {
    navigate: jasmine.createSpy('navigate')
  }
  /*
   *  Response Url
   * */
  let metaUrl = {
    LOGIN: '/operator/login',
    META_API: '/meta-api'
  };

  let subject:GlobalUtils = null;
  let backend:MockBackend = null;
  let http:Http = null;
  /*
   *  The beforeEach function is called once before each spec in the describe in which it is called
   * */
  beforeEach(()=>TestBed.configureTestingModule({

    providers: [
      GlobalUtils,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Router, useValue: mockRouter
      },
      {
        provide: Http,
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      },
    ]
  }));

  beforeEach(inject([GlobalUtils, MockBackend, Http], (_globalUtils:GlobalUtils, mockBackend:MockBackend, _http:Http) => {
    subject = _globalUtils;
    backend = mockBackend;
    http = _http;
  }));

  /*
  * This Test case is check Response of getMetaUrls function
  * getMetaUrls must return response
  * */
  it('Should have get Meta urls', (done) => {
    // HTTP Mocking
    backend.connections.subscribe((connection:MockConnection)=> {
      let options = new ResponseOptions({
        body: JSON.stringify(metaUrl),status: 200
      });
      connection.mockRespond(new Response(options));
    });
    /*
     * we mock http get method
     * */
    http
      .get(Constant.metaUrl)
      .subscribe((response) => {
        subject.getMetaUrls();
        expect(Constant.saveUrl).toEqual(metaUrl);
        done();
      });

  });

  /*
  * This Test case is check empty response and redirect to error page
  * getMetaUrls must return empty response
  * */
  it('Should have get Empty Meta urls data', (done) => {
    backend.connections.subscribe((connection:MockConnection)=> {
      let options = new ResponseOptions({
        body: JSON.stringify(''), status: 200
      });
      connection.mockRespond(new Response(options));
    });

    http
      .get(Constant.metaUrl)
      .subscribe((response) => {
        subject.getMetaUrls();
        expect(mockRouter.navigate).toHaveBeenCalledWith(['page-error']);
        done();
      });
  });
describe('Authentication test',()=>{

});
2.spec文件现在为空,因为我想在此文件中使用common.ts函数,并且我想知道如何使用