2

ng2-dragula を含むコンポーネントで単体テストを実行したいと考えています。

ただし、コンポーネントで単純な単体テストを実行すると、エラーが発生します

TypeError: 未定義のプロパティ 'setOptions' を読み取れません

component.html

<div [dragula]="'section-bag'"
     [dragulaModel]='form.sections'>
  <div *ngFor="let section of form.sections">
    <div class="drag-handle__section"></div>
  </div>
</div>

component.ts

import { Component, Input } from '@angular/core';
import { DragulaService } from 'ng2-dragula';
...


export class MyComponent {

  @Input() form;

  constructor(private dragulaService: DragulaService) {
    dragulaService.setOptions('section-bag', {
      moves: (el, container, handle) => {
        return handle.classList.contains('drag-handle__section');
      }
    });
  }

  ...
}

component.spec.ts

import { DragulaService } from 'ng2-dragula';
...


describe('Test for MyComponent', () => {
  let comp: MyComponent;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ MyComponent ],
      providers: [
        { provide: DragulaService }
      ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    comp = fixture.componentInstance;
    comp.form.sections = [];
    comp.form.sections.push(new FormSection());

    fixture.detectChanges();
  });

  it('should create', () => {
    expect(comp).toBeTruthy();
  });

});

Dragula が正しくインポートされていないと思いますが、Dragula をコンポーネントのコンストラクターで使用するためにテストでプロバイダーとして追加するにはどうすればよいですか?

私はAngular2 単体テストを見てきました: 関連していると思われるコンポーネントのコンストラクターをテストしてますが、エラーを解決できません。

注: 私は、Dragula の単体テストについてはあまり気にしていません。コンポーネントの他の機能をテストしたいのですが、このエラーによりそれ以上のテストを実行できません。

4

1 に答える 1