Estoy tratando de modificar el comportamiento del objeto de instancia para la prueba. Si necesita saber exactamente lo que estoy tratando de lograr, es esto:
const fakeWebSocket$$: WebSocketSubject<any> = new Subject<any>() as WebSocketSubject<any>; fakeWebSocket$$.multiplex = (x: any, y: any, filterFn: (z: any) => boolean) => fakeWebSocket$$.pipe(filter(filterFn)); que está adjuntando un método multiplex falso a un Subject RxJS para poder emular un WebSocketSubject .
Esto funciona bien, pero observe cómo tengo que referirme a fakeWebSocket$$ dos veces:
// simplified for readability fakeWebSocket$$.multiplex = (x, y, filterFn) => fakeWebSocket$$.pipe(filter(filterFn)); Espero que haya una manera de reemplazar la segunda llamada explícita a fakeWebSocket$$ con this , de alguna manera.
Para poder usar this , debe reescribir la función de flecha a una function de función normal:
fakeWebSocket$$.multiplex = function (x, y, filterFn) { return this.pipe(filter(filterFn)); };Este uso no está documentado, pero debería funcionar.
Sin embargo, la documentación está escrita de tal manera que sugiere crear una clase derivada para anular multiplex() , en lugar de asignar un nuevo valor directamente a la instancia:
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();