Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
量角器,根据api请求使用angular2模拟后端_Angular_Protractor_Nightwatch.js - Fatal编程技术网

量角器,根据api请求使用angular2模拟后端

量角器,根据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应用程序)吗?我正在尝试使用量角器或夜视仪(已经尝试了这两种框架)

我需要一些帮助来解决我的问题。我需要在angular2应用程序向api发出请求时模拟一些数据,我需要执行以下操作:

$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后端的一个“外部模拟”,还没有亲自做过,请参阅:


由于angular 2中不支持模拟模块,我制作了一个小型量角器插件,允许模拟ajax请求。你可以在这里找到它:

目前还没有文档,但您可以找到示例测试。我希望它能对你有所帮助。

由于Angular 2仍然不支持
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'
        }
    ]
};