使用jasmine进行subscribe方法的angular2测试

时间:2016-10-17 07:42:01

标签: unit-testing angular karma-jasmine

我有一个像这样测试的规范代码

login() {

    this.auth.login(this.username, this.password).subscribe(() => {

      }
    });
  }

和像这样的实现代码

UUID

它给出错误:

  

this.auth.login(...)。subscribe不是函数

为什么会发生此错误?

4 个答案:

答案 0 :(得分:23)

您需要使用subscribe方法返回一些内容,因为该组件会直接从subscribe调用login。字符串没有。你可以只返回一个subscribe函数的对象,它应该可以工作

and.returnValue({ subscribe: () => {} });

或者如果你想传递一个真正的可观察物,你可以

and.returnValue(Observable.of('some value'));

您可能需要导入rxjs/add/observable/of

答案 1 :(得分:2)

在rxjs v6上,您应使用of而不是Observable.ofObservable.from例如

const loginService: any = {
    getUser: () => of(['Adam West']),
};

并导入

import { of } from 'rxjs';

答案 2 :(得分:1)

您需要按如下方式模拟登录功能:

let loginService: any = {
    login(): Observable<any> {
        return Observable.of('you object');
    }
};

您可能会发现observable.if函数未定义,因此您需要以这种方式导入observable:

import { Observable } from 'rxjs/Rx';
import 'rxjs/add/observable/of';

答案 3 :(得分:1)

更改您的间谍以登录&#39; authService上的方法返回一个observable而不是一个值。您需要导入:

forge.help@autodesk.com

设置你的间谍:

import 'rxjs/add/observable/from';
import {Observable} from 'rxjs/Observable';

致电登录:

const loginResult = '';
const spy = spyOn(authService, 'login').and.callFake(() => {
    return Observable.from([loginResult]);
})

断言:

fixture.componentInstance.login();