我有一个像这样测试的规范代码
login() {
this.auth.login(this.username, this.password).subscribe(() => {
}
});
}
和像这样的实现代码
UUID
它给出错误:
this.auth.login(...)。subscribe不是函数
为什么会发生此错误?
答案 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.of
或Observable.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();