使用角度2添加firebase的单元测试

时间:2015-12-02 13:07:54

标签: javascript unit-testing typescript firebase angular

有没有人知道如何使用角度2来测试基本的火力基础添加项目进行基本单位测试。

我的代码使用的是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();
     })

 });

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

enter image description here

1 个答案:

答案 0 :(得分:3)

开始测试的三个步骤。

  1. Setup your testing environment。 Angular 2文档有很好的指导。
  2. 编写代码。
  3. 写下测试。
  4. 假设您创建了一个名为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中的任何功能创建模拟。