angular - 使用 firebase auth 的单元测试 Angular 服务?

标签 angular firebase unit-testing jasmine firebase-authentication

我已经在返回 Promise 的 Angular 上设置了简单的身份验证服务:

import * as firebase from 'firebase/app';

@Injectable({
    providedIn: 'root'
})

export class AuthService {

  doLogin(val:{email:string, password:string}) {
  return new Promise<any>((resolve, reject) => {
    firebase
      .auth()
      .signInWithEmailAndPassword(val.email, val.password)
      .then(
        res => resolve(res),
        err => reject(err)
      );
    });
  }

}

如何正确地对服务实现单元测试? 我目前实现此目的的方式是使用 jasmine 进行单元测试,通过提供真实的用户凭据(这不是一件好事,因为我要将代码推送到 github)并使用该凭据直接调用 doLogin 方法。

describe('AuthService', () => {
let service: AuthService;
const userCreds = {
    email: 'somerealemail@somedomain.com',
    password: 'somerealpassword'
};

beforeEach(() => TestBed.configureTestingModule({
    imports: [FirebaseModule],
    providers: [AuthService]
}));

beforeEach(() => {
    service = TestBed.get(AuthService);
});

it('should logged in', async((done) => {
    service.doLogin(userCreds).then(
        res => {
            expect(res).toBeTruthy();
        }
    )
}));

抱歉,如果代码很困惑,我对 Angular 和 jasmine 都是全新的,非常感谢任何建议或想法, 谢谢

最佳答案

我强烈建议您重构代码以使用依赖项注入(inject)。请参阅文档 here

然后,您可以将 Firebase 作为外部依赖项注入(inject),这将使模拟变得更加容易,因此测试也更加容易。请参阅 The official Angular library for Firebase 中有关如何使用 Firebase 执行此操作的示例

完成此操作后,您就可以以相当简单的方式对其进行测试。这是 Stackblitz 中的示例测试 Firebase 服务。

关于angular - 使用 firebase auth 的单元测试 Angular 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235078/

相关文章:

css - angular2-cli 给出@multi 样式错误

javascript - 如何定义组件是否嵌套在 Angular 6 中?

android - FirebaseInstanceId : Token retrieval failed: SERVICE_NOT_AVAILABLE

javascript - Firebase - myFirebase.child().once() 返回未定义

c# - 单元测试中的进度指示

java - 为什么要使用模拟对象 (Java)?所有模拟框架都服务于相同的目的吗?

javascript - Angular - 如何在加载组件之前等待提供者获取请求完成?

Angular - 具有 asp.net core spa 的多环境

firebase - 为什么在我测试更新或创建时,firebase 模拟器会抛出无效的参数错误?

javascript - NPM 包模块中的 Jest 单元测试失败并显示 `ReferenceError`