unit-testing - Angular2(2.1.0)服务中的UnitTest Mock Http响应

标签 unit-testing angular angular2-testing

我对网上关于测试Angular2的不同来源感到很困惑,主要是因为版本不同。我正在使用 Angular 2.1.0 final,我不明白如何为我的服务测试类模拟一个简单的 http 响应:

import { TestBed, async, inject } from '@angular/core/testing';
import { PersonService } from '../services/person.service';
import { Person} from '../models/Person';
import { MOCK_DATA_PERSON } from '../test/mocks/mock-data-person';

// HTTP mocking imports
import { Http, BaseRequestOptions, Response, HttpModule, ResponseOptions } from '@angular/http';
import { MockBackend, MockConnection } from '@angular/http/testing';


describe('PersonService', () => {
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            providers: [
                PersonService,
                MockBackend,
                BaseRequestOptions,
                {
                    provide: Http,
                    useFactory: (backend: MockBackend, options: BaseRequestOptions) => {
                        return new Http(backend, options);
                    },
                    deps: [MockBackend, BaseRequestOptions],
                }
            ],
            imports: [
                HttpModule
            ]
        });

        TestBed.compileComponents();
    }));

    it('returns a list of persons', async(inject([MockBackend, PersonService], (backend: MockBackend, service) => {

        backend.connections.subscribe(
            (connection: MockConnection) => {
                connection.mockRespond(new Response(
                    new ResponseOptions({
                        body: JSON.stringify({name: "Bob", surname : "Jones"})
                    })));
            });

        service.getPersons()
            .subscribe(persons=> {
                expect(persons.length).toBeDefined();
                expect(persons.length).toBe(1);
            }).catch(error => console.log(error));
    })));


});

鉴于 getPersons 方法如下所示:

getPersons (): Observable<Person[]> {
    return this.http.get(this.getAllUrl)
      .map(res.json().data)
      .catch(this.handleError);
  }

我收到错误 “失败:this.http.get(...).map 不是一个函数”

最佳答案

测试很好,但未找到 Observable.map 运算符。尝试只导入它

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

关于unit-testing - Angular2(2.1.0)服务中的UnitTest Mock Http响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40155328/

相关文章:

c# - ASP.NET MVC 6 中的 TryValidateModel

Angular - 如何在 VS Code 中更改 html 文件中变量的颜色?

javascript - Angular 14 - 滚动到具有特定 id 的 div

angular - 未捕获( promise ): TypeError: Cannot read property 'registerControl' of null

angular - 测试 - 无法解析 (ClassName) 的所有参数

angular - 编写 angular2 测试并更改模拟返回值 - 使其变干?

Angular2 - 单元测试 Observable 错误 "Cannot read property ' 未定义订阅'

python - 更改由 nose 测试生成器创建的测试的名称

c++ - gmock基类的构造器实例化与另一个实例

java - 在多模块项目中获取 .war 依赖的覆盖范围