加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 4单元测试与jasmine/karma与http post mocking – 如何

发布时间:2020-12-17 07:10:30 所属栏目:安全 来源:网络整理
导读:我有一个服务,我想在角4打字茉莉花单元测试. 现在,http正在做一个帖子,它返回一个身份,但是……它没有发送任何东西. 我想要有良好的代码覆盖率,但我不明白如何完成这个模拟语句. 这是我的服务文件中http post的方法 addSession() { let headers = new Header
我有一个服务,我想在角4打字茉莉花单元测试.

现在,http正在做一个帖子,它返回一个身份,但是……它没有发送任何东西.

我想要有良好的代码覆盖率,但我不明白如何完成这个模拟语句.

这是我的服务文件中http post的方法

addSession() {
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });

        return this.http.post(this.url,JSON.stringify({}),options)
            .map((response: Response) => response.json());

}

然后SPEC FILE,我没有得到真正的测试,我想假装我从服务http帖子收到一个号码,响应应该像000000014

规格

import { TrackerFormService } from './tracker-form.service'
import { Observable } from 'rxjs/Observable'

describe('TrackerFormService',() => {

    let trackerFormService: TrackerFormService,mockHttp;

    beforeEach(() => {
        mockHttp = jasmine.createSpyObj('mockHttp',['get','post','put']
        )
        trackerFormService = new TrackerFormService(mockHttp);
    });

    describe('addSession',() => {

        it('add session ',() => {
              // how to test,what to test?    
              // response,is a number?  how to mock/fake this?

        })

    })

})

解决方法

为了实现你想要的,你需要的模拟是一个简单的函数,返回与POST正常相同的函数;另一件事是你的测试不应该是真正的服务器,所以你需要这样的东西(你可能需要添加其他依赖项):

import { HttpModule } from '@angular/http';
import { TrackerFormService } from './tracker-form.service'
import { Observable } from 'rxjs/Observable'

describe('TrackerFormService',() => {
// Mock the service like this and add all the functions you have in this fashion
let trackerFormService: TrackerFormService,mockService = {
    addSession: jasmine.createSpy('addSession').and.returnValue(Observable.of('your session object mock goes here'))
  };

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpModule],providers: [{
        provide: TrackerFormService,useValue: mockService
      }]
    });
  });

  // Do this trick to inject the service every time,and just use `service` in your tests
  beforeEach(inject([TrackerFormService],(trackerFormService) => {
    service = trackerFormService;
  }));

  describe('addSession',() => {
    it('add session ',() => {
      let fakeResponse = null;

      // Call the service function and subscribe to it to catch the fake response coming from the mock.
      service.addSession().subscribe((value) => {
        // in here value will be whatever you put as returnValue (remember to keep the observable.of())
        fakeResponse = value;
      });

      // expects as in any test.
      expect(fakeResponse).toBeDefined();
      expect(fakeResponse).toBe('your session object mock goes here');
    });
  });
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读