- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个非常简单的“创建”单元测试,ng cli
为您生成的类型:
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
imports: [
HttpClientTestingModule,
FormsModule,
RouterTestingModule.withRoutes([{ path: 'home', redirectTo: '/' }])
],
providers: [SomeService1, SomeService2, { provide: SomeService3, useValue: {} }],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
现在,当我像这样运行此测试时 ng test --browser=Chrome
而不是查看 Karma 结果页面,我正在查看我的组件。
我的 CLI 版本是 1.6.3
,Karma 1.7.1
,Angular 5.2.0
,OS macOS。
更新 我的浏览器被捕获,karma 加载,测试运行但我看到的不是 karma 结果而是我的全屏组件,因为它的 css 覆盖了它们的结果。如果我在 DOM 中找到 div 并将其删除,我可以看到 Karma 结果。
我只是期待 Angular 删除那个节点。
最佳答案
我不太确定为什么组件的 DOM 编译在测试结束后仍然存在,但我注意到它只发生在最后一次运行的测试中。如果您可以添加另一个同样编译组件但不添加全屏组件的组件测试,那么前一个组件测试将被正确删除。因此,简单地添加更多测试可能是最简单的解决方案。
但如果这还不够,这里有两个可能的解决方案:
如果您的测试不涉及验证生成的 DOM,您可以通过直接使用该组件来简化测试的安排。
describe('MyComponent', () => {
TestBed.configureTestingModule({
// declarations: [MyComponent],
imports: [
HttpClientTestingModule,
FormsModule,
RouterTestingModule.withRoutes([{ path: 'home', redirectTo: '/' }]),
],
// 1. Add the component as a provider.
providers: [MyComponent, SomeService1, SomeService2, { provide: SomeService3, useValue: {} }],
schemas: [NO_ERRORS_SCHEMA],
});
it('should do thing #1', () => {
// 2. Test it like you would test a service.
const comp = TestBed.get(MyComponent);
expect(comp.value).toBe(false, 'off at first');
comp.doThing1();
expect(comp.value).toBe(true, 'on after click');
comp.doThing1();
expect(comp.value).toBe(false, 'off after second click');
});
it('should do thing #2', () => {
const comp = TestBed.get(MyComponent);
expect(comp.value2).toMatch(/is off/i, 'off at first');
comp.doThing2();
expect(comp.value2).toMatch(/is on/i, 'on after clicked');
});
});
更多信息 here .
如果您确实需要测试 DOM,我发现的唯一解决方法是在完成测试后显式删除 HTML 元素。
afterEach(() => {
if (fixture.nativeElement && 'remove' in fixture.nativeElement) {
(fixture.nativeElement as HTMLElement).remove();
}
});
关于angular - Ng5 Karma Jasmine 测试呈现组件而不是结果页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492619/
在angular 6项目中,我使用angular cli命令ng g lierary @some/libName创建了 Angular 库。在我的库中,我有一个需要@ng-bootstrap/ng-b
我在 plunker 有一个简单的例子.我在一个元素上有一个 ng-show,另一个元素有一个选择。选择应该切换显示/隐藏其他(输入)元素。最初将 select 设置为 Yes 会按预期显示其他输入元
我需要一个由其定义的属性(受监控)过滤的数据列表,我不能这样做: ng-if="project.monitored" 因为我需要计算不受监控的数量。 对于这个例子,我简化了从 getProjects(
我知道 ng-show 和 ng-hide 影响元素上设置的类,而 ng-if 控制元素是否呈现为 DOM 的一部分 是否有选择 ng-if 而不是 ng-show/ng-hide 或反之亦然的示例?
我试图理解 ng-if 和 ng-show/ng-hide 之间的区别,但它们看起来相同对我来说。 选择使用其中之一时我应该记住什么区别吗? 最佳答案 ngIf ngIf 指令根据表达式删除或重新创建
我有一个基本问题,通过查看 Angular 文档或 Google 找不到答案,因此我假设这是不可能的,但我想确定一下。 基本上我想要的是使用一个变量,例如$scope.loggedIn,如下所示: H
据我了解ng-show和ng-hide影响元素上设置的类,并且 ng-if控制元素是否呈现为 DOM 的一部分。 是否有选择 ng-if 的指南超过ng-show/ng-hide或者反之亦然? 最佳答
我的 html 中有几个 div。我正在将内容导出为 PDF,当用户单击导出按钮时会下载 PDF。我希望少数 div 的内容不导出/显示在 PDF 中,但应显示在网页上。我已将 ng-if="!isE
我有一个标记按钮,当用户点击它时,标记讨论,然后标记按钮被替换为文本“成功标记”。目前,我在单击标记按钮后无法禁用 ng-click 时遇到了问题。 ng-click 对于文本“已成功标记”仍然存在,
我在 Angular 1.4.7 中有这段代码: console.log('press') 不会在按下任何键时触发。我也尝试使用 keyup 和 keydown,但它们也不起作用。 我知道一个元素需
正如标题中提到的,我不知道如何使用 ng-bind-html 在部分内部呈现 html。 这里有一个 plunker 来说明。 http://plnkr.co/edit/YFfHsahcum7XA8G
将 ng-bootstrap 安装到我的 Angular-CLI(11.0.4) 时出现错误。 什么时候 ng add @ng-bootstrap/ng-bootstrap 还有我的日志文件 [err
我想从另一个 ng-controller 访问 ng-model,这可能吗?如何实现?在下面的代码中,我使用两个 Controller ,第一个 Controller 具有 mddl1,另一个 Con
在我的应用程序中,当我对文章进行 ng-repeat 时,用户单击“我想隐藏并显示一些元素”。为此,我使用的是 videoPlaying[$index],它对于所有具有 ng-hide 的元素都可以正
预信息 我尝试将管理员和客户分开在不同的阶段或 View 中。 这样,管理员可以在将表发布给客户之前对其进行修改。 问题在表格 -> td 中有按钮来控制暂存、释放(显示)或恢复(隐藏)? 所以基本上
这个问题在这里已经有了答案: What are the nuances of scope prototypal / prototypical inheritance in AngularJS? (3
我有以下奇怪的情况 - Controller 片段 - $scope.filterNum = {0: 'filterVal1', 1: 'filterVal2', 2: 'filterVal3', 3
AngularJS 版本:1.3.8 JSFiddle: http://jsfiddle.net/uYFE9/4/ 我一直在开发一个小的 AngularJS 应用程序,遇到了一些问题。我在页面上有一个
我有一个范围对象,其中包含具有 3 个不同图像的对象。我在 div 内显示图像,该图像重复直到范围对象的长度。我有 3 个不同的 img 标签,它们具有 ng-if 属性,并且仅一次显示 3 个图像之
在 AngularJs 中没有提供 ng-enabled 指令。是否有任何适当的理由不在框架中提供该指令,因为当您可以使用 ng- 时,我们同时拥有 ng-show 和 ng-hide隐藏来实现我们的
我是一名优秀的程序员,十分优秀!