【发布时间】:2016-10-26 01:56:22
【问题描述】:
我正在学习使用 Karma 测试 Angular 2,并且想知道代码中的一些我不理解的点。 TestBed“模拟模块”配置好后,运行如下代码:
mockBackend = getTestBed().get(MockBackend);
这是做什么的?我在另一篇文章中找到了以下解释:“获取对模拟后端的引用,因此我们可以在使用 Http.get 获取假数据时做出响应”,但我不明白为什么我需要“获取它”,是不是已经从 import {MockBackend, MockConnection} from '@angular/http/testing'; 那里得到了吗?还是模块以某种方式获取方法?
我后来就这样用了……还是不明白为什么要把它附加到测试台上:
mockBackend.connections.subscribe(
(connection: MockConnection) => {
connection.mockRespond(new Response(
new ResponseOptions({
body: "lol data"
}
)));
});
简而言之,实际问题是——我发布的第一行代码是做什么的?
完整代码,仅用于上下文:
import { TestBed, getTestBed, async, inject } from '@angular/core/testing';
import { Headers, BaseRequestOptions, Response, HttpModule, Http, XHRBackend, RequestMethod} from '@angular/http';
import {ResponseOptions} from '@angular/http';
import {MockBackend, MockConnection} from '@angular/http/testing';
import {FooHttpService} from '../../services/foo-service.service.ts';
describe('My Service Making an Http Call', () => {
let mockBackend: MockBackend;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
FooHttpService,
MockBackend,
BaseRequestOptions,
{
provide: Http,
deps: [MockBackend, BaseRequestOptions],
useFactory:
(backend: XHRBackend, defaultOptions: BaseRequestOptions) => {
return new Http(backend, defaultOptions);
}
}
],
imports: [
HttpModule
]
});
mockBackend = getTestBed().get(MockBackend);
TestBed.compileComponents();
}));
代码取自tutorial here。
【问题讨论】:
标签: unit-testing angular karma-runner angular2-testing