[英]Angular 2/4 Jasmine unit testing a service with json object structure
I have a service that I want to unit test. 我有要进行单元测试的服务。 It has a current json array object in which when this observable is subscribed to, it works fine.
它有一个当前的json数组对象,在其中订阅了此Observable时,它可以正常工作。
However, what am I doing wrong with my unit test? 但是,我的单元测试出了什么问题?
Service code 服务编号
getTrackerData(): (Observable<any>) {
return Observable.of(tracker)
.do(data => console.log('trackerdata', data))
.catch(this.handleError)
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
} }
DATA 数据
const tracker =
[{
"tracker": "2278474849", "task": 1, "agent": 1, "session": "2278474849-1-1"
}
]
Unit Test 单元测试
/// <reference path="../../../../node_modules/@types/jasmine/index.d.ts" />
import { TestBed, fakeAsync, inject, tick, async, ComponentFixture, ComponentFixtureAutoDetect } from '@angular/core/testing';
import { MockBackend } from '@angular/http/testing'
import { Http, BaseRequestOptions, Response, ResponseOptions } from '@angular/http'
import { BrowserModule, By } from "@angular/platform-browser";
import { ReactiveFormsModule } from '@angular/forms';
import { Observable } from 'rxjs/Rx'
import { TrackerService } from './tracker.service'
describe('tracker service', () => {
let mockResponse, matchingItem, connection
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
TrackerService,
MockBackend,
BaseRequestOptions,
{
provide: Http,
useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions),
deps: [MockBackend, BaseRequestOptions]
},
]
});
const items =
[{
"tracker": "2278474849", "task": 1, "agent": 1, "session": "2278474849-1-1"
}
];
mockResponse = new Response(new ResponseOptions({ body: items, status: 200 }));
}));
describe('getTrackerData', () => {
//subscribe to connection and storing it later
it('should return all items', inject([TrackerService, MockBackend], (service: TrackerService, backend: MockBackend) => {
backend.connections.subscribe(connection => {
connection.mockRespond(mockResponse);
});
service.getTrackerData() //{ "tracker": "2278474849", "task": 1, "agent": 1, "session": "2278474849-1-1" }
.subscribe((items: any => {
expect(this).toBe(2);
}));
})
});
I seem to be getting errors in the describe
section , Problem is that I'm not used to writing javascript/angular unit test, along with mixing up a few examples in the project I'm on coupled with online examples. 我似乎在
describe
部分出现错误,问题是我不习惯编写javascript /角度单元测试,并且在我正在进行的项目中结合了一些示例和在线示例。
Seems like what I want/need to do should be way simple , but yet I imported so many dependencies that this is now just confusing. 似乎我想要/需要做的事情应该很简单,但是我导入了太多的依赖项,现在这很令人困惑。
Anyone know what I need to do? 有人知道我需要做什么吗?
I've been testing services by getting the service instance from the getTestBed
function. 我一直在通过从
getTestBed
函数获取服务实例来测试服务。 Try changing your inner describe
block to: 尝试将您的内部
describe
块更改为:
describe('getTrackerData', () => {
it('should return all items', (done) => {
let service: TrackerService;
let bed = getTestBed();
backend.connections.subscribe(connection => {
connection.mockRespond(mockResponse);
});
service = bed.get(TrackerService);
service.getTrackerData()
.subscribe((items: any => {
expect(this).toBe(2);
done();
}));
})
Make sure to import getTestBed
from '@angular/core/testing'
. 确保从
'@angular/core/testing'
导入getTestBed
。 I'm also not sure you need any of these imports: 我也不确定您是否需要以下任何导入:
import { BrowserModule, By } from "@angular/platform-browser";
import { ReactiveFormsModule } from '@angular/forms';
import { Observable } from 'rxjs/Rx'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.