2015-09-25 30 views
1

想知道是否有人在量角器测试中更新模拟调用的好方法。我需要能够模拟一个电话(我可以使用ngMockE2E),但下次拨打电话时,我希望它返回不同的结果。在量角器测试中更新模拟对象

httpbackend.when('GET', ....URL....).respond(200, results); 

其中results是返回的json对象。

第一次打电话时,它返回正确的json。但在同一测试中,我想更新这些结果,以便下次调用时返回更新的json。

想法?

+0

另外,我尝试了这种方法:https://github.com/kbaltrinic/http-backend-proxy/issues/20。但记录了这个问题,因为我还没有成功。 – rfodge

+0

你使用http-backend-proxy来模拟响应吗? –

+0

是的,我试过是因为基于文档,我认为我可以使用SyncContext在相同的测试中更新响应,但是我在上面的评论中发布了这个问题,因为它不适用于我。 – rfodge

回答

1

使用http-backend-proxy模块时,可以在context object帮助下修改具有相同URL的请求的响应。为此,您必须将函数传递给.respond()方法,该方法必须返回包含状态和响应数据的数组。在此函数内部,您可以访问所谓的上下文对象,该对象用于将数据从量角器测试传输到页面上的Angular应用程序。可以在测试中修改此上下文对象,所以Angular应用程序可以接收另一个响应。

var HttpBackend = require('http-backend-proxy'); 
var proxy = new HttpBackend(browser); 

// ... 

// use one data for first response 
proxy.context = { 
    notes: notifications, 
    messages: allMessages 
}; 

proxy.when('GET', '...notificationsURL...').respond(function() { 
    return [200, $httpBackend.context]; 
}); 

// here make a first call 

// use another data for second response 
proxy.context = { 
    notes: notifications2, 
    messages: allMessages2 
}; 

proxy.syncContext(); // required, update context content for Angular app 

// here make a second call 

注:传递给.respond()功能将被序列(转换为字符串)和喷射的网页上,通过默认从角可变$httpBackend访问上下文对象时使用。看看这个文档部分重命名它 - Configuring the Context Object

相关问题