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'); }); }); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读