我已经在返回 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/