使用keycloak进行角度测试“用户未登录”

Posted

技术标签:

【中文标题】使用keycloak进行角度测试“用户未登录”【英文标题】:Angular testing with keycloack "user is not logged in" 【发布时间】:2018-08-16 20:10:01 【问题描述】:

目前我有一个使用 Keycloak 来实现 sso 的小型应用程序。 但是,当我想测试我的 main.component.ts 时,我遇到了标准“它应该创建”测试失败的问题,我收到以下错误消息:

MainComponent 应该创建 错误:用户未登录

下面是我的 main.component.spec 文件

导入 async, ComponentFixture, TestBed from '@angular/core/testing';

从 './main.component' 导入 MainComponent ;进口 AppTopBarComponent 来自 '../app.topbar.component';进口 AppMenuComponent 来自“../app.menu.component”;导入 RouterModule 来自“@angular/路由器”;从导入 RouterTestingModule '@angular/路由器/测试';从“@angular/forms”导入 FormsModule; 从'primeng/primeng'导入MenuModule;进口 AppSubMenuComponent 来自“../app.menu.component”;进口 KeycloakService 来自“keycloak-angular”;

describe('MainComponent', () => let component: MainComponent; 让夹具:ComponentFixture;

beforeEach(async(() =>

TestBed.configureTestingModule(
  declarations: [ MainComponent, AppTopBarComponent, AppMenuComponent, AppSubMenuComponent],
  providers: [KeycloakService],
  imports: [RouterModule, RouterTestingModule, FormsModule, MenuModule]
).compileComponents();   ));

beforeEach(() => 夹具 = TestBed.createComponent(MainComponent); 组件=fixture.componentInstance; 夹具.detectChanges(); ); // TODO: 期望用户登录但没有发生 --> 与 KeyCloak 有关系 it('should 创建', () => 期望(组件).toBeTruthy(); );

);

我没有太多的测试经验,所以我不确定我应该如何处理这个问题?以某种方式模拟钥匙斗篷?

谢谢!

【问题讨论】:

【参考方案1】:

是的,你应该模拟服务:

 let Mock1 =
   someMethod: jasmine.createSpy('someMethod');
  ;

// 在 TestBed.configureTestingModule 中 提供者:[提供:KeycloakService,useValu:Mock1]

【讨论】:

感谢您的回答!现在似乎更进一步,但现在我收到以下错误:“TypeError: this.keycloakService.getUsername is not a function” 你模拟了服务中的所有方法吗? @AlexanderPoshtaruk - 你能详细说明一下吗? KeycloakService 中有 14 个方法。所有这些都需要被模拟才能运行测试? 你应该重构大函数并将其拆分为更小的函数

以上是关于使用keycloak进行角度测试“用户未登录”的主要内容,如果未能解决你的问题,请参考以下文章

如何将角度应用程序从keycloak登录重定向到特定路线

Keycloak:将 ldap 组映射到 springboot 角色

如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌

使用 keycloak 进行 Springboot 测试

使用 Jmeter 对 Keycloak 进行压力测试导致 100% 的 CPU 使用率

Keycloak 无法使用有效令牌验证用户信息