javascript - 我们可以在 Angular 中使用 Jasmine/Karma 测试 ngrx 流吗?

标签 javascript angular unit-testing karma-jasmine ngrx

我已将 ngrx 用于我的 Angular 应用程序。现在我正在尝试使用 Jasmine 和 karma 工具进行单元测试,但我找不到合适的方法来测试 ngrx 流程。

请帮助我提供任何方法或其他来源也可以,在此先感谢。

请在下面找到我要测试的组件。

login-form.component.ts


import { Component, OnInit, AfterViewInit, AfterViewChecked, AfterContentInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';
import { ModalService } from '../../../@carbon/modal';
import { LoginResponse } from '../../../@core/login/login.contract';
import { LoginService } from '../../../@core/login/login.service';
import { SessionStorageService } from '../../../@core/session-storage/session-storage.service';
import { LocalStorageService } from '../../../@core/local-storage/local-storage.service';
import { Store } from '@ngrx/store';
import { AppState } from '../../../@models/app-state';
import { ActionSignIn, selectorLogin } from '../../../@core/login/login.reducer';
import { LoginState } from '../../../@core/login/login.state';
import { BusyState } from '../../../@shared/busy-indicator/busy-state';
import {Router} from '@angular/router';


@Component({
  selector: 'eose-login-form',
  templateUrl: './login-form.component.html',
  styleUrls: ['./login-form.component.scss']
})
export class LoginFormComponent implements OnInit {

 // loading: BusyState;
  loading: boolean = false;
  loadingMsg: string = '';
  authForm: FormGroup;
  changeForm: FormGroup
  constructor(
    private store: Store<AppState>,
    private fb: FormBuilder,
    private modalService: ModalService
  ) {
    this.authForm = this.fb.group({
      'env': new FormControl('cdtdevdir'),
      'email': new FormControl('', Validators.required),
      'password': new FormControl('', Validators.required),
      'newpassword': new FormControl(''),
      'confirmpassword': new FormControl('')
    })
  }

  handleLoadingChange(loadingState: BusyState) {
   // this.loading = loadingState;
  }


  ngOnInit() {
    this.store.select(selectorLogin)
    .subscribe((loginState: LoginState) => {
      this.loading = loginState.loading;
      this.loadingMsg = loginState.loadingMsg;
    })
  }

  openModal() {
    this.modalService.open('sign-in');
  }

  onLogin() {
     this.store.select(selectorLogin)
     .subscribe((loginState: LoginState) => {
       this.loading = loginState.loading;
     })
    console.log('Login Payload', this.authForm.value);
   this.store.dispatch(new ActionSignIn(this.authForm.value));
  }
}

最佳答案

您可以spyOn dispatch 并检查action 是否已被调度

let actionSignIn = new ActionSignIn(your input);
expect(store.dispatch).toHaveBeenCalldWith(actionSignIn);

关于javascript - 我们可以在 Angular 中使用 Jasmine/Karma 测试 ngrx 流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51393920/

相关文章:

javascript - jQuery 表单和选择框?

javascript - 拆分单词的第一个字符

javascript - 从 body 内容 append DIV 会删除 DOM 元素

javascript - 如果两个条件之一为真,如何以 Angular 隐藏元素

python - 基于cmd模块为python3 shell编写unittest

javascript - 谷歌地图 - 获取标记的位置

Angular 树抖动不剥离开发代码,我应该寻找什么?

Angular - 无法使用 Angular 通用运行 rxjs 间隔

通知的Android绑定(bind)和JUnit测试

java - intellij IDEA 如何给 Java 项目添加单元测试?