Тестирование Angular с помощью @ angular-redux / store в сборнике рассказов - PullRequest
0 голосов
/ 23 января 2019

Я написал это на @angular-redux/store и мне было интересно, если решение уже существует.

https://github.com/angular-redux/store/issues/551

Вот резюме, чтобы спасти вас от чтения ссылки:

Использование Angular и Storybook до сих пор хорошо работало.Однако у меня есть случаи, когда мой компонент зависит от @select ().Как я могу сказать компоненту в моей истории, чтобы он использовал фиктивную наблюдаемую точку или точку данных?

Вот мой пример кода:

import { storiesOf, moduleMetadata } from '@storybook/angular';

import { CommonModule } from '@angular/common';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

// Modules
... custom modules ...


// Components
...myAppComponents...
import { MyParticularComponent as component } from './my-particular.component';


// Mock Data
... mock json data...

const props = { ...mockData... };

storiesOf('This Particular Component', module)
  .addDecorator(
    moduleMetadata({
      declarations: [component, ...other components...],
      imports: [
        CommonModule,
        BrowserAnimationsModule,
        ...custom modules...
      ],
      schemas: [],
      providers: []
    })
  )
  .add('Some View of the Component', () => ({
    component,
    props
  }));

И мой компонент имеет:

@Input()
someInput: string;

@select()
stateValue$: Observable<SomeData>;

propOne;
propTwo;

ngOnInit() {
    this.stateValue$.subscribe(data => {
      const { propOne, propTwo } = data;
      this.propOne = propOne;
      this.propTwo = propTwo;
    });
  }

1 Ответ

0 голосов
/ 24 января 2019

Сначала я создаю реквизит для своего компонента. Если что-то имеет декоратор @select, то оно должно принадлежать свойству '@angular-redux::substore::instance::selections'. Вот и мы:

const createProps = {

   const stateValue: DataStruct = {...};

   // Create the Observable.  Need .next and .complete for subscribe.
   const stateValue$: Subject<DataStruct> = MockNgRedux.getSelectorStub('stateValue');
   stateValue$.next(stateValue);
   stateValue$.complete();

   return {
      someInput: 'Hello World!',
      '@angular-redux::substore::instance::selections': {
           stateValue$
       }
   }
}


...
.add('Some View of the Component', () => ({
    component,
    props: createProps()
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...