1

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

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

results返回的 json 对象在哪里。

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

想法?

4

1 回答 1

1

使用http-backend-proxy模块时,可以借助context object修改具有相同 URL 的请求的响应。为此,您必须将一个函数传递给该.respond()方法,该方法必须返回一个包含状态和响应数据的数组。在此函数中,您可以访问所谓的上下文对象,该对象用于将数据从 Protractor 测试传输到页面上的 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。查看此文档部分以重命名它 -配置上下文对象

于 2015-09-26T19:30:32.930 回答