我正在嘗試修改和實體物件的行為以進行測驗。如果您需要確切地知道我想要達到的目標,那就是:
const fakeWebSocket$$: WebSocketSubject<any> = new Subject<any>() as WebSocketSubject<any>;
fakeWebSocket$$.multiplex = (x: any, y: any, filterFn: (z: any) => boolean) =>
fakeWebSocket$$.pipe(filter(filterFn));
它將假multiplex方法附加到 RxJS-Subject以便能夠模擬WebSocketSubject.
這作業正常,但請注意我必須如何參考fakeWebSocket$$兩次:
// simplified for readability
fakeWebSocket$$.multiplex = (x, y, filterFn) => fakeWebSocket$$.pipe(filter(filterFn));
我倒是希望有一種方法來取代第二顯式呼叫fakeWebSocket$$與this,不知何故?
uj5u.com熱心網友回復:
為了能夠使用this,您必須將箭頭函式重寫為普通function函式:
fakeWebSocket$$.multiplex = function (x, y, filterFn) {
return this.pipe(filter(filterFn));
};
這種用法沒有記錄在案,但它應該可以作業。
然而,檔案的撰寫方式建議創建一個派生類來覆寫multiplex(),而不是直接為實體分配一個新值:
class FakeSubject<T> extends WebSocketSubject<T> {
override multiplex(
subMsg: () => any,
unsubMsg: () => any,
messageFilter: (value: T) => boolean
) {
return this.pipe(filter(messageFilter));
}
}
const fakeWebSocket$$ = new FakeSubject();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372015.html
標籤:javascript 测试 这个
