首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何对依赖于RC3路由器的组件进行单元测试?

如何对依赖于RC3路由器的组件进行单元测试?
EN

Stack Overflow用户
提问于 2016-07-01 00:56:40
回答 1查看 1K关注 0票数 9

我正在尝试让单元测试与RC1一起使用“新的”路由器。我如何在3.0.0-alpha.8上实现这一点?

我的依赖关系:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"@angular/common": "2.0.0-rc.3",
"@angular/compiler": "2.0.0-rc.3",
"@angular/core": "2.0.0-rc.3",
"@angular/forms": "0.2.0",
"@angular/platform-browser": "2.0.0-rc.3",
"@angular/platform-browser-dynamic": "2.0.0-rc.3",
"@angular/router": "3.0.0-beta.2",

我想测试使用指令的的组件routerLink

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {ROUTER_DIRECTIVES} from '@angular/router';
@Component({
    selector: 'app-topmenu',
    template: require('./app-topmenu.tpl.html'),
    directives: [ROUTER_DIRECTIVES]
})
export class TopMenu {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<nav class="app-top-menu">
    <a *ngFor="let link of links" [routerLink]="link.route">{{link.text}}</a>
</nav>

以前,在使用rc1时,我使用这样的方法对组件进行单元测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {Location} from '@angular/common';
import {SpyLocation} from '@angular/common/testing';
import {Router, RouteRegistry, ROUTER_DIRECTIVES, ROUTER_PRIMARY_COMPONENT} from '@angular/router-deprecated';
import {RootRouter} from '@angular/router-deprecated/src/router';

describe('Router link capabilities', () => {
    beforeEachProviders(() => [
        RouteRegistry,
        { provide: Location, useClass: SpyLocation },
        { provide: ROUTER_PRIMARY_COMPONENT, useValue: TestComponent },
        { provide: Router, useClass: RootRouter }
    ]);

    it('creates routerLinks with the expected URLs', fakeAsync(
        inject([TestComponentBuilder, Location], (tcb: TestComponentBuilder, spyLocation: SpyLocation) => {
            tcb.overrideTemplate(TestComponent, `
                <app-top-menu [links]='[
                    { text: "A", route: ["/TestA/TestB/TestC"] },
                    { text: "B", route: ["/TestA", "TestB", "TestC"] }
                ]'></app-top-menu>
                <router-outlet></router-outlet>
            `).createAsync(TestComponent)
            .then((fixture: ComponentFixture<TestComponent>) => {
                fixture.detectChanges();
                spyLocation.simulateUrlPop('url-a/url-b/url-c');
                tick();
                fixture.detectChanges();
                let nativeLinks: HTMLAnchorElement[] = fixture.nativeElement.querySelectorAll('a');

                expect(nativeLinks.length).toBe(2);
                expect(nativeLinks[0].textContent).toBe('A');
                expect(nativeLinks[1].textContent).toBe('B');
            });
        })
    ));
});

当我试图将routerLink导入从@angular/router-deprecated切换到从@angular/router导入ROUTER_DIRECTIVES时,我会收到一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ORIGINAL EXCEPTION: Platforms have to be created via `createPlatform`!

我可以在网上找到的关于测试“新的”路由器和createPlatform消息的所有文档都提到了提供ROUTER_FAKE_PROVIDERS (似乎包含在rc2中,但随rc3一起提供):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {ROUTER_FAKE_PROVIDERS} from '@angular/router/testing';
// ^ [ts] Cannot find module '@angular/router/testing'.

.d.ts文件夹中搜索编译后的node_modules/@angular/router文件时,我也没有找到任何对测试/模拟/假货的引用。

是否有人迁移到rc3并开始工作了?

EN

回答 1

Stack Overflow用户

发布于 2016-07-06 01:07:51

要测试RC3 (3.0.0-alpha.*)路由器,您需要做一些与以前版本中的路由器设置方式不同的事情。

您需要定义这样的RouterConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {provideRouter, RouterConfig} from '@angular/router';

export const APP_ROUTES : RouterConfig = [
    {path: '', component: AppComponent},
    // more paths
];

export const APP_ROUTE_PROVIDERS = [
    provideRouter(APP_ROUTES)  
];

然后在你的测试文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {ActivatedRoute, RouterConfig, Router} from '@angular/router';

class MockRouter { createUrlTree() {} }
class MockActivatedRoute { }

beforeEachProviders(() => [
  provide(Router, { useClass: MockRouter }),
  provide(ActivatedRoute, { useClass: MockActivatedRoute }),
]);

describe(){
   // etc
}

您的路由器现在是可测试的。

对于RC4:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {ActivatedRoute, RouterConfig, Router} from '@angular/router';

class MockRouter { createUrlTree() {} }
class MockActivatedRoute { }



describe(){
  beforeEach(() => [
      addProviders([
          provide(Router, { useClass: MockRouter }),
          provide(ActivatedRoute, { useClass: MockActivatedRoute }),
      ]);
  ]);
  //etc
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38141176

复制
相关文章
python: 自动安装缺失库文件
Note: os.system('所需指令') 还可以完成许多其他任务,非常强大。
JNingWei
2018/09/27
9270
CentOS 6.4用源代码安装LAMP环境
在Linux中用源代码安装是一件很麻烦的事情,但也是对服务最好的安装模式之一,自己可以自定义安装哪些功能和模块。但是功能模块一但多了以后就会忽略某个选项,这样会导至以后服务中的某些功能不完善和运行不稳定,这将会给以后的测试维护带来十分不方便。现在我将写出自己在服务器上搭建的过程,希望对大家有帮助,但如果比我有更好的方法我希望大家指出来,避免以后出现同一问题。
星哥玩云
2022/06/28
2750
CentOS 6.4用源代码安装LNMP环境
对于在Linux系统中安装web服务其实都是差不多的,只是软件的选择不一样,不过在php-5.2.17和以前的版本LNMP环境和以后安装有一点区别,就是启用--enable-fastcgi这个模块。现在我用php-5.3.27来搭建LNMP环境,对于搭建不成功的网友们希望给我留言,大家一起解决问题,一起进步。
星哥玩云
2022/06/28
3310
CentOS 6.4用源代码安装LNMP环境
CentOS下源代码编译和安装Apache
wget http://mirror.downloadvn.com/apache//httpd/httpd-2.4.41.tar.gz
星哥玩云
2022/07/29
4880
CentOS下源代码编译和安装Apache
CentOS 6.2下以源代码方式安装LAMP
相关附件 百度云盘下载:http://pan.baidu.com/s/12JCku
星哥玩云
2022/07/04
3160
CentOS 6.2下以源代码方式安装LAMP
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
2013-07-26 写过一篇《CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4》,CentOS 7在CentOS 6的基础上有很大的调整,本文是这篇文章的更新,主要介绍CentOS 7下安装Mono 3.4 和 Jexus 5.6。 CentOS是一个基于RHEL的Linux发行版,其目的是为了提供一套免费与自由的企业等级Linux发行版。CentOS的名称来自于「Community ENTerprise Operating System」,从名称便可以知道这是一套由社区主导、并以企业
张善友
2018/01/19
1.4K0
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
在 Ubuntu Server 上安装配置 Mono 生产环境
在 Ubuntu Server 上安装和配置 Apache2 + Mono 生产环境的记录。 服务器环境是 Ubuntu Server 13.04 虚拟机模式 (Virtual Machine Mode), 安装的 Mono 的版本是 3.2.1 , 最终环境如下图所示:
beginor
2020/08/10
1.2K0
在 Ubuntu Server 上安装配置 Mono 生产环境
conda管理C源代码程序的时候总是出现库文件冲突或者缺失
现在初学者都喜欢使用conda来管理软件环境,安装方法代码如下: #一路yes下去 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-4.6.14-Linux-x86_64.sh source ~/.bashrc ## 安装好conda后需要设置镜像。 conda config --add channels https://mirrors.tuna.tsinghua.edu.
生信技能树
2020/10/27
9510
conda管理C源代码程序的时候总是出现库文件冲突或者缺失
CentOS7下源代码安装netcat-0.7.1
NetCat-0.7.1的官网地址为:http://netcat.sourceforge.net/,如下图所示:
ccf19881030
2020/11/03
1.7K0
CentOS7下源代码安装netcat-0.7.1
CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4
最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6 2012年初写过一篇《32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0》,2013年7月24日Mono 3.2发布了,3.2版本有很多期待的新特性,具体参看《跨平台的 .NET 运行环境 Mono 3.2 新特性》,本文主要就是这篇文章的更新。 CentOS是一个基于RHEL的Linux发行版,其目的是为了提供一套免费与自由的企业等级Linux发行版。CentOS的名称来自于「Comm
张善友
2018/01/19
1.1K0
CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4
推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器--Jexus
在Linux/Unix上架设ASP.NET WEB服务器,有两个可选方式,一种是Mono+XSP,一种是Mono+Jexus,其它的方式,比如 Apache+mod_mono、Nginx+FastCgi 等等,其实质与XSP并无区别,都是使用Mono所提供的ASP.NET处理模块:Mono.WebServer名字空间实现对ASP.NET网站的支持。Jexus不但具有跨平台ASP.NET服务器这样的标志性特征,同时还拥有内核级的安全监控、入侵检测、URL重写、无文件路由等一系列重要功能和专有特性。那么XSP和
张善友
2018/01/22
3.1K0
推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器--Jexus
Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
  由于Linux/Unix等有更强的安全性、运行效率高、拥有大量优秀的开源组件,而.Net则有着其他语言无与伦比的开发效率,因此在非微软平台下运行.Net程序的需求很强烈。Mono 是一个由Novell 公司发起、并且得到微软支持的开源项目。Mono 项目可以在Linux,FreeBSD,Unix,Mac OS X 、Android和苹果系统等非微软操作系统下兼容运行.Net程序。目前占IOS游戏应用市场55%份额的游戏都是使用基于Mono的Unity3d技术开发的。    基于Mono让ASP.Net开发的网站运行在Linux操作系统下也已经有了大量成功的案例,比如世界著名的网站“维基百科WikiPedia ”的搜索部分就是使用Mono支撑运行的、Mozilla开发者社区也是基于Mono运行,可以看http://www.mono-project.com/Companies_Using_Mono  这一些使用Mono进行开发的公司的列表。让.Net脱离Windows的禁锢,在开源的世界中尽情的徜徉。
Edison Zhou
2018/08/20
1.3K0
Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
centos 7 安装Samba服务(文件共享)
今天是一个安装samba文件共享服务 首先依旧是先把Linux服务器改为静态IP vim /etc/sysconfig/network-scripts/ifcfg-ens33
小手冰凉
2019/09/10
8620
centos 7 安装Samba服务(文件共享)
CentOS MONO nginx 运行
     yum install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel
py3study
2020/01/09
1.1K0
Maven 编译项目缺失xml文件
有一些情况下,在java目录下,除了会有java代码,还有一些xml,比如使用hibernate时候,*.hbm.xml文件可能会放在某一个包下,在部署的时候是需要把这些XML也复制过去的。
前Thoughtworks-杨焱
2021/12/08
5410
CentOS安装 FTP文件服务器
在文件最后面新增allow_writeable_chroot=YES,允许已登录用户进行上传
爱游博客
2019/08/06
4.1K0
CentOS安装 FTP文件服务器
Python实验:消除缺失的文件编号
#####编写一个程序,在一个文件夹中,找到所有带指定前缀的文件,诸如spam001.txt,spam002.txt 等,并定位缺失的编号(例如存在spam001.txt 和spam003.txt,但不存在spam002.txt)。让该程序对所有后面的文件改名,消除缺失的编号。 import shutil, re, os filedir = 'C:\\Users\\Loyu\\Desktop\\python1' a = os.listdir(filedir) alist = ' '.join(a) sp
py3study
2020/01/09
1.2K0
centos 安装 使用本地图像文件来安装网络安装「建议收藏」
有时很无奈,无盘,U它只有盘4G而一个centos该盘4.16G,如何将它安装了网络安装,对不起,你想用20M更多的带宽,并注意使用网络启动盘的方法
全栈程序员站长
2022/07/06
3900
CentOS7下编译FFMPEG源代码
找到一篇关于在CentOS7下编译FFMPEG源代码的文章,地址为:Compile FFmpeg on CentOS
ccf19881030
2020/10/26
7560
CentOS7下编译FFMPEG源代码
点击加载更多

相似问题

在CentOS 6.3上安装Mod_Mono和Xsp4

29

无法在Centos上使用mono启动XSP 4.5

11

作曲家安装,ext缺失- LEMP Centos 7

10

运行lwpd.xsp.core源代码的调试会话

12

在centos上从python源代码中安装opencv

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文