angular - ngRedux ile servisi nasıl test edebilirim


ngRedux'in getState'ini karma jasmine ile nasıl taklit edebilirim?

Örneğin servisimin değeri store'dan ngRedux ile alması.

this.ngRedux.getState()

Cevap #1

Sorunu getState() metodunu casuslayarak çözdüm:

spyOn(MockNgRedux.getInstance(), 'getState').and.returnValue({ ... });

Bunu yapmanın yolu olup olmadığını hiç bilmiyorum, ama benim durumumda işe yaradı. Yine de herhangi bir karmaşık durum değişikliğini taklit etmeme gerek yok, sadece basit bir getState() yeterli.

MockNgRedux, @angular-redux/store modülünün bir parçasıdır. Testiniz yaklaşık olarak şöyle görünebilir:

...
import {MockNgRedux, NgReduxTestingModule} from '@angular-redux/store/lib/testing';

describe('MyTest', () => {
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            ...
            imports: [
                ...
                NgReduxTestingModule
            ],
            providers: [
                ...
                MockNgRedux
            ]
        })
        .compileComponents();
    }));

    it('does something', () => {
        // set up
        spyOn(MockNgRedux.getInstance(), 'getState').and.returnValue({here: 'be my mock store'});
        spyOn(MockNgRedux.getInstance(), 'dispatch').and.stub();
        ....
        expect(MockNgRedux.getInstance().dispatch).toHaveBeenCalledWith(something);
    });
});

İşte belgelerin bağlantısı: https://angular-redux.github.io/store/classes/mockngredux.html