これまでOKだったAngular 2アプリケーションがあります。私のGlobalsService.getGlobals()は、私のOptionService.getOptions()を通じて "USA States"を取得します。私のコードがカルマ/ジャスミンテストに落ちるところです。Angular2カルマテストでは「TypeError:this._subscribeは関数ではありません」と書かれています
現在のテスト設定でgetGlobals()を呼び出すと、「this._subscribeは関数ではありません」というエラーが表示されます。私はGoogle Chromeが協力していないので、これをデバッグするのは難しいと思っています。
デバッグを追加したgetGlobals()コードが追加されました。私はgetOptions()と.subscribe()の間でコードを分割して、何が起こっているのかを確認します。
public getGlobals(): void {
let asdf = this.optionService.getOptions();
console.log("asdf is " + (typeof asdf) + ", asdf.subscribe is: " + asdf.subscribe);
try {
asdf.subscribe(
(options: Option[]) => this.fillOptions(options),
(error: string) => this.error = error
);
} catch(error) {
console.log("caught error involving asdf, it is: " + error);
throw error;
}
}
私は私が手にこのコードを実行します。
LOG: 'asdf is object, asdf.subscribe is: function (observerOrNext, error, complete) {
[1] var operator = this.operator;
[1] var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);
[1] if (operator) {
[1] operator.call(sink, this.source);
[1] }
[1] else {
[1] sink.add(this._subscribe(sink));
[1] }
[1] if (sink.syncErrorThrowable) {
[1] sink.syncErrorThrowable = false;
[1] if (sink.syncErrorThrown) {
[1] throw sink.syncErrorValue;
[1] }
[1] }
[1] return sink;
[1] }'
asdf.subscribeのコードは、あなたがnode_modules/rxjs/Observable.jsから見たものです。したがって、getOptions()からの戻り値はObservableです。多くのプロパティの中には、次のような特徴があります。
_subscribe: Array[4] (each item is an Object of my Option data type)
_proto_: Object
_subscribe: (subscriber)
subscribe: (observer or next, error, complete)
しかし、コードを続けるとエラーが発生します。変数asdfのある場所では、 "this"はGlobalsServiceです。
マイモックOptionServiceコード:
@Injectable()
export class MockOptionService {
constructor() { }
getOptions(): Observable<Option[]> {
let options: Option[] = [
{ id: 'IN', name: 'Indiana', topic: Option.TOPIC_STATE },
{ id: 'NJ', name: 'New Jersey', topic: Option.TOPIC_STATE },
{ id: 'CONCERT', name: "Concert", topic: Option.TOPIC_EVENT_TYPE },
{ id: 'NY', name: 'New York', topic: Option.TOPIC_STATE }
];
return Observable.create(options);
}
}
これを介して注入される:
describe('Globals Service',() => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: OptionService, useClass: MockOptionService },
{ provide: GlobalsService, useClass: GlobalsService }
]
});
[SNIP]
})。
私が言ったように、私はこれをデバッグするときにChromeに問題があります。デバッガでObservable.jsソースを表示し、ブレークポイントを設定しようとすると、ブラウザに存在しないObservable.tsファイルの空白ページが表示されます。ブレークポイントはどちらの場所にも表示されません。コードは、存在しないObservable.ts:92で停止しています。
私の質問は、その後、以下のとおりです。
1.私は私の活字の世界でJavascriptのブレークポイントを与えるためにChromeを説得することはできますか?
2.オブジェクト配列を作成してObservableにアタッチするための適切な機能は何ですか? Observable.create()が間違っていると思われます。
ありがとう、 Jerome。
私はそれを試み、結果を得ました。私はまだクロームの反社会的行動については不思議です。 –