Ver código fonte

feat(core): unit test for useCatalog

alvarosabu 2 anos atrás
pai
commit
fc240b5b21

+ 28 - 0
packages/tres/src/core/useCatalogue/index.ts

@@ -9,6 +9,21 @@ const catalogue: Ref<TresCatalogue> = ref({ ...THREE, uuid: THREE.MathUtils.gene
 delete catalogue.value.Scene
 
 let localApp: App
+
+/**
+ * State for the catalogue of THREE objects
+ *
+ * ```ts
+ * const { catalogue } = useCatalogue()
+ *
+ * console.log(catalogue.value.Mesh) // Mesh
+ * ```
+ *
+ * @export
+ * @param {App} [app]
+ * @param {string} [prefix='Tres']
+ * @return {*}
+ */
 export function useCatalogue(app?: App, prefix = 'Tres') {
   const { logError } = useLogger()
   if (!localApp && app) {
@@ -16,6 +31,19 @@ export function useCatalogue(app?: App, prefix = 'Tres') {
   }
   const { createComponentInstances } = useInstanceCreator(prefix)
 
+  /**
+   * Extend the catalogue with new THREE objects
+   *
+   * ```ts
+   * const { catalog, extend } = useCatalogue()
+   *
+   * extend({ MyObject: { foo: 'bar' } })
+   *
+   * console.log(catalog.value.MyObject.foo) // bar
+   * ```
+   *
+   * @param {*} objects
+   */
   const extend = (objects: any) => {
     if (!objects) {
       logError('No objects provided to extend catalogue')

+ 35 - 0
packages/tres/src/core/useCatalogue/useCatalogue.test.ts

@@ -0,0 +1,35 @@
+import { createApp } from 'vue'
+import { withSetup } from '/@/utils/test-utils'
+import { useCatalogue } from './'
+const [composable, app] = withSetup(() => useCatalogue())
+
+describe('useCatalogue', () => {
+  it('should fill the catalogue with THREE objects', () => {
+    const { catalogue } = composable
+
+    expect(catalogue.value).toHaveProperty('Mesh')
+    expect(catalogue.value).toHaveProperty('MeshBasicMaterial')
+  })
+  it('should skip Scene object', () => {
+    const { catalogue } = composable
+
+    expect(catalogue.value).not.toHaveProperty('Scene')
+  })
+  it('should extend the catalogue with objects', () => {
+    const app = createApp({})
+    const { extend, catalogue } = useCatalogue(app)
+
+    extend({ MyObject: { foo: 'bar' } })
+
+    expect(catalogue.value.MyObject.foo).toEqual('bar')
+  })
+
+  it('should register components for new objects', () => {
+    const { extend } = composable
+
+    extend({ MyObject: { foo: 'bar' } })
+
+    expect(app._context.components.MyObject).toBeDefined()
+  })
+  // TODO: find a way to mock createComponentInstances to test the component registration
+})