首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为angular2测试模拟http错误

如何为angular2测试模拟http错误
EN

Stack Overflow用户
提问于 2016-02-16 23:19:24
回答 3查看 19.6K关注 0票数 25

我正在为angular2服务编写单元测试。代码片段:

// jasmine specfile

// already injected MockConnection into Http

backend.connections.subscribe ((c: MockConnection) => {
    connection = c;
});

// doing get-request
myServiceCallwithHttpRequest ().subscribe (result => {
    // this test passes!
    expect (result).toEqual ({
        "message": "No Such Object"
    });
    // this test fails, don't know how to get the response code
    expect (whereIsResponseStatus).toBe (404);
});

connection.mockRespond (new Response (new ResponseOptions ({
    body: {
        "message": "No Such Object"
    },
    status: 404
})));

我的服务:

// service

myServiceCallwithHttpRequest (): Observable<Response> {
    return this.http.get ('/my/json-service').map (res => {
            // res.status == null
            return res.json ()
        })
        .catch (this.handleError); // from angular2 tutorial
}

第一个expect是OK,程序进入map调用,而不是catch。但是我如何获得状态码404呢?res.status为空。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-12 19:32:26

适用于我:

    mockConnection.mockRespond (new Response (new ResponseOptions ({
        body: {},
        status: 404
    })));
票数 0
EN

Stack Overflow用户

发布于 2016-10-05 08:06:44

要使模拟错误正常工作,您需要从@angular/http导入ResponseType,并在模拟响应中包含错误类型,然后扩展响应并实现错误

import { Response, ResponseOptions, ResponseType, Request } from '@angular/http';
import { MockConnection } from '@angular/http/testing';

class MockError extends Response implements Error {
    name:any
    message:any
}

...
handleConnection(connection:MockConnection) {
    let body = JSON.stringify({key:'val'});
    let opts = {type:ResponseType.Error, status:404, body: body};
    let responseOpts = new ResponseOptions(opts);
    connection.mockError(new MockError(responseOpts));
}
票数 37
EN

Stack Overflow用户

发布于 2016-06-15 23:56:36

node_modules\@angular\http\testing\mock_backend.d.ts上浏览源代码。MockConnection.mockRespond已经存在于您的代码中。MockConnection.mockError可能是您所需要的。试一试,看看你能得到什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35436261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档