在量角器测试中更新模拟对象

时间:2015-09-25 15:17:53

标签: json mocking jasmine protractor ngmocke2e

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

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

其中results是返回的json对象。

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

思想?

1 个答案:

答案 0 :(得分:1)

使用http-backend-proxy模块时,可以在context object的帮助下修改具有相同网址的请求的响应。为此,您已将函数传递给.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()的函数将被序列化(转换为字符串)并注入页面,默认情况下,从Angular访问上下文对象时使用变量$httpBackend。请查看此文档部分以重命名 - Configuring the Context Object