【问题标题】:unit testing angular service that uses firebase auth?使用firebase auth的单元测试角度服务?
【发布时间】:2019-03-19 06:46:01
【问题描述】:

我已经在返回 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 都是全新的,非常感谢任何建议或想法, 谢谢

【问题讨论】:

    标签: angular firebase unit-testing jasmine firebase-authentication


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了!真正了解的人总是如此明确,简明扼要,感谢@dmcgrandle!对实际要做的事情和了解的事情进行了多么令人兴奋的总结!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2020-07-10
    • 2021-03-31
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多