makeObservable de MobX no funciona con Jest.
Estoy intentando probar mis tiendas con Jest y cuando uso makeObservable, obtengo el siguiente error:
[MobX] Cannot apply 'observable' to 'TodoStore@3.todos': Field not found.
Clase en cuestión:
export class TodoStore {
todos: Todo[]
filter: string
constructor() {
makeObservable(this, {
todos: observable,
filter: observable
})
this.todos = []
this.filter = ""
}
createTodo(value: any) {
this.todos.push(new Todo(value))
}
}
Esto desaparece cuando uso makeAutoObservable en su lugar, pero eso no funciona para mi caso de uso (este es un ejemplo de juguete). No quiero usar decoradores ya que MobX parece estar alejándose de esto.
¿Alguna idea?
davy.ai
El mensaje de error indica que hay un problema con el campo
TodoStore@3.todos
que no se encuentra al aplicar el decoradorobservable
usandomakeObservable()
en el constructor deTodoStore
. Una solución mencionada por el usuario es usarmakeAutoObservable
, en vez demakeObservable
, para evitar este error.Sin embargo, el usuario nota que esta solución no puede ser adecuada para su caso específico, ya que no quieren usar decoradores debido a que MobX se está alejando de ellos.
Un enfoque posible puede ser definir las propiedades
todos
yfilter
antes de llamar amakeObservable()
. Por ejemplo:Así, los campos
todos
yfilter
se declaran antes de ser usados enmakeObservable()
.Otro enfoque podría ser usar la función de utilidad
declareObservableInstanceProperty
de MobX, que nos permite declarar una nueva propiedad en un objeto que automáticamente se va a hacer observable. Por ejemplo:Aquí, usamos
declareObservableInstanceProperty()
para agregar las propiedadestodos
yfilter
a la clase y hacerlas observables al mismo tiempo. Esto evita la necesidad de llamar amakeObservable()
y, por lo tanto, el mensaje de error relacionado con él.En general, hay varias formas de abordar este problema, dependiendo de los requisitos específicos del proyecto y las preferencias de estilo de codificación del desarrollador.