加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS单元测试:$httpBackend.when动态响应

发布时间:2020-12-17 08:52:30 所属栏目:安全 来源:网络整理
导读:在开发Feed(RSS)应用程序时,我正在玩AngularJS单元测试. Feed可以获取远程rss数据解析它并保存已解析的项目.为了测试rss提取我使用$httpBackend mock: beforeEach(inject(function (_$httpBackend_,_feedMock_,_mockConfig_) { _$httpBackend_.when('GET',_
在开发Feed(RSS)应用程序时,我正在玩AngularJS单元测试. Feed可以获取远程rss数据解析它并保存已解析的项目.为了测试rss提取我使用$httpBackend mock:
beforeEach(inject(function (_$httpBackend_,_feedMock_,_mockConfig_) {
    _$httpBackend_.when('GET',_mockConfig_.FEED_URL).respond(_feedMock_);
}));

然后在下面

$httpBackend.expectGET(mockConfig.FEED_URL);
feed.fetch();
$httpBackend.flush();

它工作正常.

但是我需要让Feed通过获取更新的rss数据并附加新项目来实现它的状态.因此,Feed提出相同的请求,但获得了新的更新数据.我正在尝试通过以下方式重新创建服务器定义:

$httpBackend.when('GET',_mockConfig_.FEED_URL).respond(feedMockUpdated);

然后使用expect和flush进行相同的操作,但$httpBackend响应旧数据(feedMock),而不是new(feedMockUpdated).如何使用$httpBackend响应同一请求中的不同数据?

您可以使用函数设置响应,而不仅仅是静态数据集.

来自文档:

http://docs.angularjs.org/api/ngMock.$httpBackend

respond – {function([status,] data[,headers])|function(function(method,url,data,headers)} – The respond method takes a set of static data to be returned or a function that can return an array containing response status (number),response data (string) and response headers (Object).

因此,据我所知,您希望在以后的调用中让相同的端点返回不同的数据,您可以尝试类似以下内容.这只是实现一个简单的计数器,它将在后续调用中切换数据.

var rssCalled = 0;

$httpBackend.when('GET',_mockConfig_.FEED_URL).respond(function(method,headers){
    if(rssCalled === 0) {
        rssCalled++;
        return [200,feedMock,{}];
    } else {
       return [200,feedMockUpdated,{}];
    }
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读