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

Updating mocked objects in protractor tests

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

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

其中 results 是返回的 json 对象。

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

想法?

使用http-backend-proxy module, it is possible to modify a response for a request with the same URL with the help of context object时。为此,您已将一个函数传递给 .respond() 方法,该方法必须 return 一个包含状态和响应数据的数组。在此函数中,您可以访问所谓的上下文对象,该对象用于将数据从 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 变量 [=13= 访问上下文对象] 用来。查看此文档部分以重命名它 - Configuring the Context Object.