首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Angular 6中的Jasmine通过ngIf router.url检查元素是否可见

Angular是一种流行的前端开发框架,而Jasmine是一个用于JavaScript的行为驱动开发(BDD)测试框架。在Angular 6中,我们可以使用Jasmine来测试ngIf指令和router.url属性,以检查元素是否可见。

首先,让我们来了解一下ngIf指令。ngIf是Angular中的一个结构性指令,用于根据条件来显示或隐藏HTML元素。它接受一个表达式作为输入,如果该表达式的值为真,则显示元素,否则隐藏元素。

接下来,我们需要了解router.url属性。在Angular中,router是一个用于导航的模块,它可以帮助我们在不同的组件之间进行导航。router.url属性用于获取当前路由的URL路径。

现在,让我们来看一下如何使用Jasmine来测试ngIf指令和router.url属性。

首先,我们需要创建一个测试用例。在Angular项目中,测试用例通常位于.spec.ts文件中。在这个文件中,我们可以使用describe函数来定义一个测试套件,并使用it函数来定义一个具体的测试用例。

代码语言:typescript
复制
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MyComponent } from './my.component';

describe('MyComponent', () => {
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [ MyComponent ]
    })
    .compileComponents();
  });

  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should show element when router.url is "/home"', () => {
    component.router.url = '/home';
    fixture.detectChanges();
    expect(component.isVisible).toBe(true);
  });

  it('should hide element when router.url is not "/home"', () => {
    component.router.url = '/about';
    fixture.detectChanges();
    expect(component.isVisible).toBe(false);
  });
});

在上面的代码中,我们首先导入了一些必要的测试相关的模块和组件。然后,我们使用describe函数定义了一个名为"MyComponent"的测试套件。在beforeEach函数中,我们使用TestBed.configureTestingModule函数配置了测试环境,并使用TestBed.createComponent函数创建了MyComponent的实例。

在具体的测试用例中,我们通过设置component.router.url属性的值来模拟不同的路由路径。然后,我们调用fixture.detectChanges函数来触发变更检测,并使用expect函数来断言元素的可见性。

需要注意的是,我们在测试用例中使用了component.isVisible属性来表示元素的可见性。这个属性的值可以通过ngIf指令和router.url属性来计算得出。

最后,我们可以使用Jasmine的命令行工具(如Karma)来运行这些测试用例,并查看测试结果。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出具体的链接地址。但是,腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储等。你可以访问腾讯云的官方网站,了解更多关于这些产品的信息和文档。

希望以上信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AngularDart 4.0 高级-结构指令 顶

Angular拥有强大模板引擎,可以让我们轻松操纵元素DOM结构。 本指南介绍Angular如何用结构指令操纵DOM,以及如何编写自己结构指令来完成相同操作。 尝试一下实例(查看源代码)。... ngIf指令不会隐藏CSS元素。 它从DOM中物理添加和删除它们。 使用浏览器开发人员工具确认事实,以检查DOM。 ? 顶部段落在DOM中。...该组件保持连接到其DOM元素。 它一直在倾听事件。 Angular不断检查可能会影响数据绑定更改。 无论组件在做什么,它都会继续这样做。 虽然看不见,但组件及其所有后代组件都会占用资源。...变量作用域限于重复模板单个实例。 您可以在其他结构指令定义中再次使用相同变量名称。 您通过在#(#var)前缀加上变量名称来声明一个模板引用变量。 引用变量是指其附加元素,组件或指令。...在没有合适宿主元素使用作为分组元素Angular将星号(*)语法解析为。 NgIf,NgFor和NgSwitch内置指令如何工作。

16K20

Angular2 之 结构型指令几个概念

结构型指令 结构型指令通过添加和删除 DOM 元素来改变DOM布局。 我们经常看到内置结构型指令有:ngIf、ngSwitch、ngFor。 下面我们着重介绍ngIf。...它仍然附加子啊它所属于DOM元素上,它仍然在监听事件。angular会继续检查哪些能影响数据绑定变更。组件原本要做哪些事情仍然在进行!它还是占用着那么多资源。...弊 如果我们很快再次使用这个组件时候,重建组件代价是非常大。 当ngIf重新变成true时候,angular会重新创建该组件及其子树。angular会重新运行每个组件初始化逻辑。...总结 基于上面的利弊分析,无论是我们在使用内置指令还是使用自定指令时候,我们应该自己分析提添加、移除元素以及创建和销毁组件后果。...而在Angular应用中,Angular会移除 标签及其子元素。 我们可以通过把短语"Hip! Hip! Hooray!"

3K20

AngularDart4.0 指南- 模板语法二 顶

元素事件可能是更常见目标,但Angular首先查看名称是否匹配已知指令事件属性,如下例所示: <!...当指令没有合适宿主元素如何元素进行分组。 如何编写自己结构指令。 为什么你只能应用一个结构指令到一个元素。 本节介绍常见结构指令: NgIf:有条件地从DOM中添加或删除元素。...NgFor:为列表中每个项目重复一个模板。 NgSwitch:只显示多个可能元素一个。 NgIf  您可以通过向该元素应用NgIf指令(称为宿主元素)来添加或移除DOM中元素。...显示/隐藏不是一回事 您可以使用类或样式绑定来控制元素可见性: <div [class.hidden]="!...这些<em>元素</em><em>的</em>所有组件都保留在内存中,<em>Angular</em>可能会继续<em>检查</em>更改。 您<em>的</em>应用可能会占用相当可观<em>的</em>计算资源,会降低用户不<em>可见</em><em>的</em>性能。

29.9K20

Angular 中结构指令模式 - 它们是什么且怎么使用

如果你对学习 结构指令 感兴趣,那么现在我们就来接着阅读,并了解它们是什么,它们有什么用以及如何在项目中使用它们。 你将学到什么 在本文中,你将学到关于 Angular 结构指令模式知识点。...{{worker.name}} Angular 生成一个 元素,然后应用 *ngIf 指令。...*ngIf 指令 我们根据条件来使用 *ngIf 来确定展示或者移除一个元素。...Angular 中我们什么时候需要用结构指令呢? 如果你想在 DOM 中添加或者移除一个元素时候,你就应该使用结构指令。 当然,我们还可以使用它们来更改元素 CSS 样式,或者添加事件监听器。...总结 结构指令是 Angular 中很重要一部分,我们可以通过多种方式使用它们。 希望通过本文,读者能更好理解怎么去使用这些指令和什么时候去使用这些模式。 本文为译文,采用意译形式。

3.8K20

Angular 6.x 快速入门

Angular CLI 是否安装成功 $ ng --version 创建新项目 $ ng new project-name 启动本地服务器 $ cd project-name $ ng serve... ngIf 与 ngFor 指令使用示例 import { Component } from '@angular/core'; interface Address { province...2.x', 'Angular 4.x', 'Angular 6.x']; } } 第五节 - 事件绑定 在 Angular 中,我们可以通过 (eventName) 语法,实现事件绑定。...1.x 中表单 ) Reactive Forms - 响应式表单 本小节主要介绍模板驱动式表单,接下来我们来演示如何通过表单来为我们之前创建 UserComponent 组件,增加让用户自定义技能功能...router-outlet 指令 该指令用于告诉 Angular 在哪里加载组件,当 Angular 路由匹配到响应路径,并成功找到需要加载组件时,它将动态创建对应组件,并将其作为兄弟元素,插入到

14.1K20

AngularDart4.0 英雄之旅-教程-04明细 顶

它表示元素及其子元素构成一个主模板。 ngFor指令遍历组件英雄列表并为该列表中每个英雄呈现该模板一个实例。...Angular无法显示null selectedHero属性并抛出以下错误,在浏览器控制台中可见: EXCEPTION: TypeError: Cannot read property 'name...当没有选定英雄时,ngIf指令从DOM中移除英雄详情HTML。 没有英雄细节元素或绑定担心。...当表达式为false时,Angular删除选定类。 ===运算符测试给定对象是否相同。 在模板语法指南中阅读有关[class]绑定更多信息。  ...您将Hero类移到lib / src下自己文件中。 你增加了选择英雄和显示英雄细节能力。 您了解了如何在组件模板中使用核心指令ngIf和ngFor。

3K30

Angular 从入坑到挖坑 - 表单控件概览

一、Overview angular 入坑记录笔记第三篇,介绍 angular 中表单控件相关概念,了解如何angular 中创建一个表单,以及如何针对表单控件进行数据校验。...四、Step by Step 4.1、表单简介 用来处理用户输入,通过从视图中捕获用户输入事件、验证用户输入是否满足条件,从而创建出表单模型修改组件中数据模型,达到获取用户输入数据功能 模板驱动表单...在使用 ngModel 进行模板绑定时,angular 在 form 标签上自动附加了一个 NgForm 指令,因为 NgForm 指令会控制表单中带有 ngModel 指令和 name 属性元素,而...,一个 FormControl 类实例对应于一个表单控件,在使用时,通过将控件实例赋值给属性,后续则可以通过监听这个自定义属性来跟踪表单控件值和状态 import { Component, OnInit...formGroup 指令绑定到 form 元素,然后将控件组每一个属性通过 formControlName 绑定到具体对应表单控件上 <form [formGroup]='profileForm'

18.9K20

浅谈Angular

*ngIf--控制元素显隐性 ?:ng-show和*ngIf区别是什么?...ng-show本质上设置元素display值为none,只是设置样式,DOM结构还在,而*ngIf是真正意义上从DOM结构中移除结构型指令 *ngIf--控制元素显隐性 ?...ng-show本质上设置元素display值为none,只是设置样式,DOM结构还在,而*ngIf是真正意义上从DOM结构中移除 *ngFor--动态创建DOM结构 ngSwitch--通过匹配case...来控制元素显隐 在自定义指令里获取指令添加到其上面的元素,需要依赖注入ElementRef服务 如果自定义指令想要接收从外部传入值,需要使用@Input装饰器\....可以给@Input装饰器内部填写一个元数据,这个值是外部使用名字 内部还是使用原来名字 3.如果想要给指令添加元素绑定事件,需要使用@HostListener装饰器 如果要通过指令控制DOM显隐

4.4K10

Angular DOM 抽象概述

模板元素是一种机制,允许包含加载页面时不渲染,但又可以随后通过 JavaScript 进行实例化客户端内容。我们可以将模板视作为存储在页面上稍后使用一小段内容。...,Angular 为我们开发者提供了 元素,在 Angular 内部它主要应用在结构指令中,比如 *ngIf、*ngFor 等。...示例 前面我们已经介绍了如何使用 HTML5 template 模板元素,下面我们来看一下如何使用 元素。...初学者,可能会在某个标签上同时使用 *ngIf 或 *ngFor 指令,比如: <div class="lesson" *ngIf="lessons" *ngFor="let lesson of lessons...在浏览器环境中,虽然通过 ElementRef nativeElement 属性,我们可以方便地获取对应 DOM 元素,但我们最好不要利用 DOM API 进行 DOM 操作,最好通过 Angular

3.5K30

angular知识点梳理第二篇-基本语法

文章目录 前文回顾 基本语法 常见指令 NgModel NgFor NgIf Ng-container 管道 前文回顾 前面已经写了关于angular项目的基本介绍和如何创建一个angular项目,这一篇主要梳理一些...{{item.id}} 运行效果 NgIf NgIf指令是可以控制页面元素显示与消失,这里和隐藏要区别开,他效果和css中display:none效果是一致,和visibility...:hidden是要区别开,当if判断为false时候,页面上是整个元素都消失了,而不是仅仅隐藏了css样式 在需要使用数据绑定组件进行数据处理 import { Component, OnInit...运行效果 如果这个tag标签不太理解,你可以将它完全当作一个容器,当你需要对一段内容控制逻辑时候但是不知道使用什么元素标签时候就可以使用这个,在html任何场景下都可以使用!...官方的话:为没有 DOM 元素指令安排宿主 管道 管道其实就是具有一定功能函数,主要是一些场景是对字符串什么进行简单转化,当然我们也可以自己使用自定义函数进行数据转换,只是angular给我们提供了一些初始化功能函数管道详细列表

2.5K30

理解Angular中*ngIf指令中加问号和不加问号区别

Angular开发中,我们经常使用ngIf指令来根据条件动态渲染或移除元素。然而,在一些情况下,我们可能需要处理一些可能为空对象属性。这时,就需要了解在ngIf指令中使用加问号和不加问号区别。...首先,让我们看一下加问号使用方式,示例代码如下:html复制代码<span class="depot-sale-area-name" *ngIf="pickModel?....depotSaleAreaName"值为false,从而跳过对应元素渲染。这种方式非常实用,可以减少因空指针异常导致代码错误,增强程序稳定性。...值,那么渲染元素将会显示如下内容:销售区域: 区域A这是因为obj1存在且depotSaleAreaName字段存在,满足了*ngIf指令条件,所以元素被渲染出来。...总结一下,加问号和不加问号在Angular使用*ngIf指令区别主要在于处理对象属性是否为空时表现。我们可以根据具体业务需求来选择合适方式,确保代码可靠性和稳定性。

25400

angular面试问题_kafka面试题

Angular UT最佳实践 什么是TestBed,有什么作用 测试Service时,有其他依赖如何处理?...jasmine是一套通用测试框架,除了Angular之外,也有广泛引用;Karma是Angular专用用于管理测试配置等框架,让测试代码方便在指定浏览器执行;另外,根据喜好,也可以选择 Mocha...它支持在为其配置每个浏览器中运行测试。 同时将结果显示在命令行和浏览器上,或者输入标准格式报表,供开发人员检查哪些测试通过或失败。...在Angular项目的根目录下,我们具有用于配置Karma文件karma.conf。 什么是Jasmine? 在Angular中有什么用?...Angular UT最佳实践 在beforeEach() 中初始化使用上下文; describe(),it() 中描述要清晰。

2.3K20

如何用 Karma,Jasmine,Webpack 测试 UI 组件系列(一)配置篇

如何用 Karma,Jasmine,Webpack 测试 UI 组件系列 (一) 配置篇为什么要测试 从个人经验来看,测试是防止软件缺陷最好方法。...我们测试我们软件目的是验证它是否如我们预期中一毛一样。 单元测试 单元测试是一种测试你项目中每个最小单元代码有效手段,是使你程序思路清晰基础。...一旦所有的测试通过,这些零散单元组合在一起也会运行很好,因为这些单元行为已经被独立验证过了。 本文介绍如何使用 Karma,Jasmine,Webpack 编写单元测试代码。...Webpack 和 Babel 安装和配置 Babel和Webpack根据使用ECMAScript新特性决定是否配置,我配置如下 Jasmine 断言库引入 编写测试用例 因为我司在生成中还在使用...Angular 1.X 版本,所以测试用例编写也以此为例,需要安装angular angular-mocks。

2K150

在前端中理解MVC服务之 Angular篇(完结)

这是通过使用 JavaScript 作为脚本语言网页演变为使用 JavaScript/TypeScript 作为面向对象语言应用程序来实现。...MVC 架构是一个具有三个层/部分体系 Model -管理应用数据,这些模型将是不可见,因为它们将被引用于服务。...View 模型直观表示,即用户所看到部分 Controller - Model与View中链接 下图是我们项目结构 该文件将充当一个画布,使用 元素动态构建整个应用程序。...但是,我们注意到,前几部分中许多 DOM 操作代码已通过 Angular 得到解决,它们提供了两个结构指令,如 @ ngFor 和 _ ngIf,它们允许从模板本身轻松操作 DOM。...我建议你从第一篇与JavaScript相关帖子开始,了解所使用体系结构。下一步是通过应用 TypeScript(在第二篇文章中)来强化代码,最后查看此文章中代码已适应框架。

4.1K20

Angular教程】-内容投影u002F@ContentChildu002F@ViewChild

投影子元素 使用ng-container来包裹子元素,减少不必要dom层,类似vue中template 容器组件这样写 编号4 <ng-content select="question...在这种情况下,不建议<em>使用</em> ng-content <em>元素</em>,因为只要组件<em>的</em><em>使用</em>者提供了内容,即使该组件从未定义 ng-content <em>元素</em>或该 ng-content <em>元素</em>位于 <em>ngIf</em> 语句<em>的</em>内部,该内容也总会被初始化...<em>使用</em> ng-template <em>元素</em>,你可以让组件根据你想要<em>的</em>任何条件显式渲染内容,并可以进行多次渲染。在显式渲染 ng-template <em>元素</em>之前,<em>Angular</em> 不会初始化该<em>元素</em><em>的</em>内容。...<em>使用</em>ng-container定义我们<em>的</em>投影区块 <em>使用</em>ngTemplateOutlet指令来渲染ng-template<em>元素</em>。 <em>通过</em>内置<em>的</em>动态指令*<em>ngIf</em>来控制<em>是否</em>渲染投影。...: ContentDirective; } <em>通过</em>日志可以看到我们在切换容器组件<em>的</em>expanded标识时,只有开启状态my-hello组件才会初始化,下面的这个<em>ngIf</em>虽然在页面看不到渲染<em>的</em>内容,但组件实实在在被初始化过了

52530

AngularDart4.0 指南-体系结构概述 顶

您可以通过使用Angular标记组合HTML 模板,编写组件类来管理这些模板,在服务中添加应用程序逻辑以及在模块中装入组件和服务来编写Angular应用程序。 然后,通过引导根模块启动应用程序。...它们倾向于以属性形式出现在元素标签内,有时候以名称形式出现,但更常见是作为赋值或绑定目标。 结构指令通过添加,删除和替换DOM中元素来改变布局。...出于这个原因,这个应用程序JavaScript和TypeScript版本可以使用selectedHero作为* ngIf表达式值。 Dart版本必须使用布尔运算符!=替换。...Angular使用依赖注入来为新组件提供他们需要服务。 Angular可以通过查看构造函数参数类型来判断组件需要哪些服务。...但它并不包括你需要知道一切。 以下是其他重要Angular功能和服务简短字母顺序列表。 Forms:支持基于HTML验证和脏检查复杂数据录入方案。

7.9K30

ng-content 中隐藏内容

如果你尝试在 Angular 中编写可重复使用组件,则可能会接触到内容投射概念。然后你发现了 ,并找到了一些关于它文章,进而实现了所需功能。...接下来我们来通过一个简单示例,一步步介绍 所涉及内容。 简单示例 在本文中我们使用一个示例,来演示不同方式实现内容投影。...为了解决这个问题,我们必须使用 ngProjectAs 属性,它可以应用于任何元素上。...难道这是 ngIf 指令产生问题,让我们测试一下 ngFor 指令,看看是否有同样问题: import { Component } from '@angular/core'; @Component...The solution 为了让包装器能够控制其子元素实例化,我们可以通过两种方式完成:在我们内容周围使用 元素,或者使用带有 “*” 语法结构指令。

2.7K30
领券