量角器,根据api请求使用angular2模拟后端
我需要一些帮助来解决我的问题。我需要在angular2应用程序向api发出请求时模拟一些数据,我需要执行以下操作:量角器,根据api请求使用angular2模拟后端,angular,protractor,nightwatch.js,Angular,Protractor,Nightwatch.js,我需要一些帮助来解决我的问题。我需要在angular2应用程序向api发出请求时模拟一些数据,我需要执行以下操作: $httpBackend.when('GET', '/userbookings/').respond(my json file data); 问题是我在google上所能找到的只是用于angularJS(Angular1)的$httpBackend 有人知道我如何在E2E测试中使用它(该应用程序是angular2应用程序)吗?我正在尝试使用量角器或夜视仪(已经尝试了这两种框架)
$httpBackend.when('GET', '/userbookings/').respond(my json file data);
问题是我在google上所能找到的只是用于angularJS(Angular1)的$httpBackend
有人知道我如何在E2E测试中使用它(该应用程序是angular2应用程序)吗?我正在尝试使用量角器或夜视仪(已经尝试了这两种框架)
规格测试:
describe('Protractor Mocking bookings for angular2 site', function() {
var ngMockE2E = require('ng-mock-e2e');
var $httpBackend = ngMockE2E.$httpBackend;
beforeEach(function() {
ngMockE2E.addMockModule();
ngMockE2E.addAsDependencyForModule('myApp');
ngMockE2E.embedScript('/bower_components/angular-mocks/angular-mocks.js');
});
afterEach(function() {
ngMockE2E.clearMockModules();
});
it('Inject mock data of bookings', function() {
var EC = protractor.ExpectedConditions;
var global = require('../bin/globals.js');
// Bookings data in a json file which should be send as the response
var mockData = require('../testData.json');
browser.ignoreSynchronization = false;
$httpBackend.when('GET', '/userbookings').respond(mockData);
browser.get(global.so.enLoggedIn);
});
});
这个测试不起作用,因为它使用了某种角度的方法。我已经展示了它,所以你可以看到我的测试是什么样子的
希望有人能在这里帮助我,因为很难找到使用angular2的人。量角器:
此外,我还为TODO创建了一个github问题以引起注意:
量角器http mock
无法工作,因为它依赖于addMockModule
。我个人在Angular2示例应用程序上尝试了量角器http mock
,得到:
失败:尚不支持尝试在Angular2应用程序上加载模拟模块
对于和包也是如此
我猜,当这个问题还没有解决的时候,你应该考虑启动一个代理,它会成为你的API后端的一个“外部模拟”,还没有亲自做过,请参阅:
addMockModule
,我个人使用该插件通过代理模拟所有对后端的网络调用
它工作得非常好,配置也很简单。只需按照Angular application的配置进行操作我找到了一个解决方案,它相对来说比较简单,到目前为止效果很好,并且不需要您更改对现有导入的所有引用 根据您要完成的任务,有几个步骤。我正在进行e2e测试,因此本文将概述该解决方案 首先,使用特定于您的测试环境的配置更新angular.json(在“服务”的正上方),我的配置是: 然后,通过使用新配置更新
devServerTarget
来更新现有的e2e配置:
“devServerTarget”:“{APP_NAME}:service-e2e:test”
接下来,我创建了一组新的环境特定文件,名为模拟服务映射
,因此在我的环境文件夹中,我现在有:
mock-service-mapping.ts
mock-service-mapping.test.ts
在这些文件中,我存储到real和mock服务的映射:
import { RealDataService } from '../app/lib/services/real-data.service';
export const mockServiceMapping = {
dataServiceClass: RealDataService
};
现在,我们需要使它们特定于环境。更新angular.json以为不同的环境设置正确的映射:
"test": {
fileReplacements: [
{
replace: 'src/environments/environment.ts',
with: 'src/environments/environment.test.ts'
},
{
replace: 'src/environments/mock-service-mapping.ts',
with: 'src/environments/mock-service-mapping.test.ts'
}
]
};
最后一个魔法。在模块声明中,设置提供程序以从新的模拟环境文件中提取类
{provide:DataService,useClass:mockServiceMapping.dataServiceClass}
瞧,模拟服务,没有库,没有混乱,没有额外的编译代码,而且相当简单 我推荐这个包装。你试过angular 2吗?。我已经试过并看过了。。对其工作原理的描述很难理解。也许只有我。你在寻找的是这里描述的东西吗?它实际上并不在测试环境中,但移植过来也没有问题。我回去工作后会看一看。。看起来很有趣-谢谢你!这对我没什么帮助:(,我需要一种可以通过npm获得的库。答案很好,你知道它是否已经实现了吗?我一直在寻找如何用e2e测试模拟后端:-/@Skahrz谢谢,不幸的是,它看起来还不受支持。我找不到任何其他资源,但这个问题是如此。我面临着同样的问题,我想知道是否还有其他问题到目前为止,Angular 2.0.2和Digrator 4.0.9还不支持模拟后端吗?嘿,我无法运行这个示例。然而,帮助我的快速修复方法是将
browser.executeScript
替换为browser.driver.executeScript
中的index.js
中的我已经把它写进了一个示例应用程序中,但做了一些轻微的修改(用作量角器中一个bug的例子):参见
import { RealDataService } from '../app/lib/services/real-data.service';
export const mockServiceMapping = {
dataServiceClass: RealDataService
};
"test": {
fileReplacements: [
{
replace: 'src/environments/environment.ts',
with: 'src/environments/environment.test.ts'
},
{
replace: 'src/environments/mock-service-mapping.ts',
with: 'src/environments/mock-service-mapping.test.ts'
}
]
};