使用 Angular 2 添加 Firebase 的单元测试

Posted

技术标签:

【中文标题】使用 Angular 2 添加 Firebase 的单元测试【英文标题】:Unit tests for firebase add using angular 2 【发布时间】:2016-03-06 17:50:40 【问题描述】:

有谁知道如何使用 Angular 2 进行基本单元测试来测试基本的 Firebase 添加项。

我在代码中使用 typescript 而不是基本的 javascript

这是我正在测试的:

 export class AppComponent 
     ref: Firebase;
     refUsers: Firebase;
     refProfiles: Firebase;

     constructor()
         this.ref = new Firebase("https://markng2.firebaseio.com");
         this.refUsers = new Firebase("https://markng2.firebaseio.com/users");
         this.refProfiles = new Firebase("https://markng2.firebaseio.com/profiles");    
     

     public addUser(newUser: Object): void     
         this.refUsers.push(newUser, ()=>

         );
     
 

这是我目前的测试:

 import it, iit, describe, expect, inject, injectAsync, beforeEachProviders, fakeAsync, tick  from 'angular2/testing';
 import  AppComponent  from '../app/app';

 describe('AppComponent', () => 

     it('saves an item to Firebase', () => 
         let refUsers = new Firebase('');

         let service = new AppComponent();

         spyOn(service.refUsers, 'push');
         service.addUser( item: true );

         expect(service.refUsers.push).toHaveBeenCalled();
     )

 );

这是我在运行该测试时遇到的错误:

【问题讨论】:

好像是配置问题 【参考方案1】:

开始测试的三个步骤。

    Setup your testing environment。 Angular 2 文档对此有很好的指导。 编写您的代码。 编写测试。

假设您创建了一个名为 DataService 的类:

/// <reference path="typings/firebase/firebase.d.ts" />

export class DataService 
    ref: Firebase;
    constructor(theRef: Firebase) 
        this.ref = theRef;
    
    add(object: any) 
        this.ref.push(object);
    

要对其进行测试,您可以导入DataService 并使用 Jasmine 方法来测试 add 方法。

import DataService from './data-service';

describe('DataService', () => 

    it('saves an item to Firebase', () => 
        let ref = new Firebase('');
        let service = new DataService(ref);
        // create a spy to use if push is called
        spyOn(service.ref, 'push');
        service.add( item: true );
        // expect that push was called
        expect(service.ref.push).toHaveBeenCalled();
    )

);

测试 Firebase 方法的关键就是监视它们。您无需测试 Firebase 是否有效,只需您的代码正确调用 Firebase。

这里的问题是您在单元测试中使用了完整的 Firebase SDK。理想情况下,您希望使用模拟库,这样您就可以从 Firebase SDK 为您需要的任何功能创建模拟。

【讨论】:

嗨大卫,我已经在上面添加了我的代码,例如我的测试和我正在测试的代码。我似乎遇到了设置问题。 您似乎没有包括所有文件。这个问题虽然不是关于设置。我们尽量避免将一个问题变成多个问题。如果您还有其他问题,请解决这个问题并开始另一个问题。 好的,没有问题。我现在将创建另一个问题。这是下一个问题的链接:***.com/questions/34047379/…

以上是关于使用 Angular 2 添加 Firebase 的单元测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular 和 Firebase 登录后获取用户配置文件

如何使用 Firebase 功能部署 Angular 9 通用应用程序

使用@angular/fire@6.0.3 无法访问firebase.firestore.FieldValue.serverTimestamp()

路由时超时。 Angular 9 通用 + Firebase

使用 AngularFire2 (Angular2 rc.5) 访问 firebase.storage()

使用 Firebase 用户管理添加额外字段