# Composables
Composables are way of splitting up your code into distinct, reusable chunks.
They can replace providers, mixins and more. Any code you can put into a component, can also be written as a composable.
Using them effectively can make your code more reusable, decoupled, and easier to follow.
**More about Composables:**
- [Composables Overview](https://vuejs.org/guide/reusability/composables.html)
- [Composition API](https://vuejs.org/api/composition-api-setup.html)
- [\
```
You can now access the current user with `currentUser.value`.
## Using Composables in the Options API
Composables are not limited to the composition api. This is the same example from above, using the options api.
```vue
```
You can now access the current user with `this.currentUser` from anywhere within the component.
## Testing Components with Composable Stores
When writing a test which includes a component that has a composable store (like useCurrentUser),
there are two ways to test it.
### Mocking the store
You can provide the store in the mount function as follows:
```js
const wrapper = shallowMount(TestedComponent,
localVue,
provide: { store },
});
```
`store` must be a Vuex store.
The `mockModule` helper can help creating a store for the required modules:
```js
const store = new Vuex.Store({
modules: {
user: mockModule(userStore),
},
});
```
### Mocking the composable
The second option is to mock the composable:
```js
import { vi } from "vitest";
import { useCurrentUser } from "@/composables/user";
vi.mock("composables/user");
useCurrentUser.mockReturnValue({
currentUser: {},
});
```
While simpler in this example, you may need to manually mock more return values and composables than the other method, depending on the composables the component is using.
## Using Composables for more than Stores
Composables can be of great use to extract any reactive code from your components. For an example of this, take a look at [useFilterObjectArray](https://github.com/galaxyproject/galaxy/blob/dev/client/src/composables/filter/filter.ts).
Usage:
```vue
```
It's a simple filtering function, but fully reactive.
Whenever any of the inputs changes, the return value is re-computed, without having to call the function again.