Best JavaScript code snippet using storybook-root
stories-json.test.ts
Source:stories-json.test.ts  
1import { Router, Request, Response } from 'express';2import Watchpack from 'watchpack';3import path from 'path';4import debounce from 'lodash/debounce';5import Events from '@storybook/core-events';6import { useStoriesJson, DEBOUNCE } from './stories-json';7import { ServerChannel } from './get-server-channel';8jest.mock('watchpack');9jest.mock('lodash/debounce');10const options: Parameters<typeof useStoriesJson>[2] = {11  configDir: path.join(__dirname, '__mockdata__'),12  presets: {13    apply: async () => ['./src/**/*.stories.(ts|js|jsx)'] as any,14  },15} as any;16describe('useStoriesJson', () => {17  const use = jest.fn();18  const router: Router = { use } as any;19  const send = jest.fn();20  const write = jest.fn();21  const response: Response = {22    header: jest.fn(),23    send,24    status: jest.fn(),25    setHeader: jest.fn(),26    flushHeaders: jest.fn(),27    write,28    flush: jest.fn(),29    end: jest.fn(),30    on: jest.fn(),31  } as any;32  beforeEach(() => {33    use.mockClear();34    send.mockClear();35    write.mockClear();36    (debounce as jest.Mock).mockImplementation((cb) => cb);37  });38  const request: Request = {39    headers: { accept: 'application/json' },40  } as any;41  describe('JSON endpoint', () => {42    it('scans and extracts stories', async () => {43      const mockServerChannel = ({ emit: jest.fn() } as any) as ServerChannel;44      await useStoriesJson(router, mockServerChannel, options, options.configDir);45      expect(use).toHaveBeenCalledTimes(1);46      const route = use.mock.calls[0][1];47      await route(request, response);48      expect(send).toHaveBeenCalledTimes(1);49      expect(JSON.parse(send.mock.calls[0][0])).toMatchInlineSnapshot(`50        Object {51          "stories": Object {52            "a--story-one": Object {53              "id": "a--story-one",54              "importPath": "./src/A.stories.js",55              "kind": "A",56              "name": "Story One",57              "parameters": Object {58                "__id": "a--story-one",59                "docsOnly": false,60                "fileName": "./src/A.stories.js",61              },62              "story": "Story One",63              "title": "A",64            },65            "b--story-one": Object {66              "id": "b--story-one",67              "importPath": "./src/B.stories.ts",68              "kind": "B",69              "name": "Story One",70              "parameters": Object {71                "__id": "b--story-one",72                "docsOnly": false,73                "fileName": "./src/B.stories.ts",74              },75              "story": "Story One",76              "title": "B",77            },78            "d--story-one": Object {79              "id": "d--story-one",80              "importPath": "./src/D.stories.jsx",81              "kind": "D",82              "name": "Story One",83              "parameters": Object {84                "__id": "d--story-one",85                "docsOnly": false,86                "fileName": "./src/D.stories.jsx",87              },88              "story": "Story One",89              "title": "D",90            },91            "first-nested-deeply-f--story-one": Object {92              "id": "first-nested-deeply-f--story-one",93              "importPath": "./src/first-nested/deeply/F.stories.js",94              "kind": "First Nested/Deeply/F",95              "name": "Story One",96              "parameters": Object {97                "__id": "first-nested-deeply-f--story-one",98                "docsOnly": false,99                "fileName": "./src/first-nested/deeply/F.stories.js",100              },101              "story": "Story One",102              "title": "First Nested/Deeply/F",103            },104            "nested-button--story-one": Object {105              "id": "nested-button--story-one",106              "importPath": "./src/nested/Button.stories.ts",107              "kind": "Nested/Button",108              "name": "Story One",109              "parameters": Object {110                "__id": "nested-button--story-one",111                "docsOnly": false,112                "fileName": "./src/nested/Button.stories.ts",113              },114              "story": "Story One",115              "title": "Nested/Button",116            },117            "second-nested-g--story-one": Object {118              "id": "second-nested-g--story-one",119              "importPath": "./src/second-nested/G.stories.ts",120              "kind": "Second Nested/G",121              "name": "Story One",122              "parameters": Object {123                "__id": "second-nested-g--story-one",124                "docsOnly": false,125                "fileName": "./src/second-nested/G.stories.ts",126              },127              "story": "Story One",128              "title": "Second Nested/G",129            },130          },131          "v": 3,132        }133      `);134    });135  });136  describe('SSE endpoint', () => {137    beforeEach(() => {138      use.mockClear();139      send.mockClear();140    });141    it('sends invalidate events', async () => {142      const mockServerChannel = ({ emit: jest.fn() } as any) as ServerChannel;143      await useStoriesJson(router, mockServerChannel, options, options.configDir);144      expect(use).toHaveBeenCalledTimes(1);145      const route = use.mock.calls[0][1];146      await route(request, response);147      expect(write).not.toHaveBeenCalled();148      expect(Watchpack).toHaveBeenCalledTimes(1);149      const watcher = Watchpack.mock.instances[0];150      expect(watcher.watch).toHaveBeenCalledWith({ directories: ['./src'] });151      expect(watcher.on).toHaveBeenCalledTimes(2);152      const onChange = watcher.on.mock.calls[0][1];153      await onChange('src/nested/Button.stories.ts');154      expect(mockServerChannel.emit).toHaveBeenCalledTimes(1);155      expect(mockServerChannel.emit).toHaveBeenCalledWith(Events.STORY_INDEX_INVALIDATED);156    });157    it('only sends one invalidation when multiple event listeners are listening', async () => {158      const mockServerChannel = ({ emit: jest.fn() } as any) as ServerChannel;159      await useStoriesJson(router, mockServerChannel, options, options.configDir);160      expect(use).toHaveBeenCalledTimes(1);161      const route = use.mock.calls[0][1];162      // Don't wait for the first request here before starting the second163      await Promise.all([164        route(request, response),165        route(request, { ...response, write: jest.fn() }),166      ]);167      expect(write).not.toHaveBeenCalled();168      expect(Watchpack).toHaveBeenCalledTimes(1);169      const watcher = Watchpack.mock.instances[0];170      expect(watcher.watch).toHaveBeenCalledWith({ directories: ['./src'] });171      expect(watcher.on).toHaveBeenCalledTimes(2);172      const onChange = watcher.on.mock.calls[0][1];173      await onChange('src/nested/Button.stories.ts');174      expect(mockServerChannel.emit).toHaveBeenCalledTimes(1);175      expect(mockServerChannel.emit).toHaveBeenCalledWith(Events.STORY_INDEX_INVALIDATED);176    });177    it('debounces invalidation events', async () => {178      (debounce as jest.Mock).mockImplementation(jest.requireActual('lodash/debounce'));179      const mockServerChannel = ({ emit: jest.fn() } as any) as ServerChannel;180      await useStoriesJson(router, mockServerChannel, options, options.configDir);181      expect(use).toHaveBeenCalledTimes(1);182      const route = use.mock.calls[0][1];183      await route(request, response);184      expect(write).not.toHaveBeenCalled();185      expect(Watchpack).toHaveBeenCalledTimes(1);186      const watcher = Watchpack.mock.instances[0];187      expect(watcher.watch).toHaveBeenCalledWith({ directories: ['./src'] });188      expect(watcher.on).toHaveBeenCalledTimes(2);189      const onChange = watcher.on.mock.calls[0][1];190      await onChange('src/nested/Button.stories.ts');191      await onChange('src/nested/Button.stories.ts');192      await onChange('src/nested/Button.stories.ts');193      await onChange('src/nested/Button.stories.ts');194      await onChange('src/nested/Button.stories.ts');195      expect(mockServerChannel.emit).toHaveBeenCalledTimes(1);196      expect(mockServerChannel.emit).toHaveBeenCalledWith(Events.STORY_INDEX_INVALIDATED);197      await new Promise((r) => setTimeout(r, 2 * DEBOUNCE));198      expect(mockServerChannel.emit).toHaveBeenCalledTimes(2);199    });200  });...Using AI Code Generation
1import { mockServerChannel } from 'storybook-root-logger';2describe('test', () => {3  it('test', () => {4    const mockServer = mockServerChannel('test');5    mockServer.on('test', () => {6      console.log('test');7    });8  });9});10import { configure, addDecorator } from '@storybook/react';11import { withRootLogger } from 'storybook-root-logger';12addDecorator(withRootLogger);13configure(require.context('../', true, /\.stories\.js$/), module);14import { addons } from '@storybook/addons';15import { registerRootLogger } from 'storybook-root-logger';16registerRootLogger(addons);Using AI Code Generation
1import { mockServerChannel } from 'storybook-root';2import { mockServer } from 'graphql-tools';3describe('test', () => {4  beforeAll(() => {5    const schema = 'schema { query: Query } type Query { hello: String }';6    const server = mockServer(schema);7    mockServerChannel(server);8  });9  it('test', () => {10  });11});Using AI Code Generation
1import { mockServerChannel } from 'storybook-root-logger';2mockServerChannel.emit('message', {3});4import { mockServerChannel } from 'storybook-root-logger';5const mockServer = {6  on: (eventName, callback) => {7    mockServerChannel.on(eventName, callback);8  }9};10addons.getChannel().on('storybookjs/mock-server', () => mockServer);11import { mockServerChannel } from 'storybook-root-logger';12const mockServer = {13  on: (eventName, callback) => {14    mockServerChannel.on(eventName, callback);15  }16};17addons.getChannel().on('storybookjs/mock-server', () => mockServer);18import { mockServerChannel } from 'storybook-root-logger';19const mockServer = {20  on: (eventName, callback) => {21    mockServerChannel.on(eventName, callback);22  }23};24addons.getChannel().on('storybookjs/mock-server', () => mockServer);25import { mockServerChannel } from 'storybook-root-logger';26const mockServer = {27  on: (eventName, callback) => {28    mockServerChannel.on(eventName, callback);29  }30};31addons.getChannel().on('storybookjs/mock-server', () => mockServer);32import { mockServerChannel } from 'storybook-root-logger';33const mockServer = {34  on: (eventName, callback) => {35    mockServerChannel.on(eventName, callback);36  }37};38addons.getChannel().on('storybookjs/mock-server', () => mockServer);39import { mockServerChannel } from 'storybook-root-logger';40const mockServer = {41  on: (eventName, callback) => {42    mockServerChannel.on(eventName, callback);43  }44};Using AI Code Generation
1import { HeroService } from '../../services/hero.service';2const heroServiceStub = {3  getHeroes: () => of([{4  }])5};6import { HeroService } from '../../services/hero.service';7const heroServiceStub = {8  getHeroes: () => of([{9  }])10};11import { HeroService } from '../../services/hero.service';12const heroServiceStub = {13  getHeroes: () => of([{14  }])15};16import { HeroService } from '../../services/hero.service';17const heroServiceStub = {18  getHeroes: () => of([{19  }])20};21import { HeroService } from '../../services/hero.service';22const heroServiceStub = {23  getHeroes: () => of([{24  }])25};26import { HeroService } from '../../services/hero.service';27const heroServiceStub = {28  getHeroes: () => of([{Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
