在API失败时对ngrx效果进行单元测试的方法如下:
provideMockStore
函数来提供初始状态和选择器。provideMockActions
函数来提供模拟的Action流。cold
函数创建一个冷的Observable,模拟API调用的响应。你可以使用throwError
操作符来模拟API调用的失败。it
函数定义一个测试断言,来验证在API调用失败时ngrx效果的行为。在这个测试断言中,你可以使用expect
函数来断言ngrx效果的行为是否符合预期。下面是一个示例代码,演示了如何在API失败时对ngrx效果进行单元测试:
import { TestBed } from '@angular/core/testing';
import { provideMockStore, MockStore } from '@ngrx/store/testing';
import { provideMockActions } from '@ngrx/effects/testing';
import { Observable, throwError } from 'rxjs';
import { cold, hot } from 'jasmine-marbles';
import { MyEffects } from './my-effects';
import { MyService } from './my-service';
import { MyActionTypes, MyAction } from './my-actions';
describe('MyEffects', () => {
let effects: MyEffects;
let actions$: Observable<any>;
let store: MockStore;
let myService: jasmine.SpyObj<MyService>;
beforeEach(() => {
const spy = jasmine.createSpyObj('MyService', ['apiCall']);
TestBed.configureTestingModule({
providers: [
MyEffects,
provideMockActions(() => actions$),
provideMockStore(),
{ provide: MyService, useValue: spy }
]
});
effects = TestBed.inject(MyEffects);
actions$ = TestBed.inject(Actions);
store = TestBed.inject(MockStore);
myService = TestBed.inject(MyService) as jasmine.SpyObj<MyService>;
});
it('should dispatch MyFailureAction when API call fails', () => {
const error = new Error('API call failed');
myService.apiCall.and.returnValue(throwError(error));
const action = new MyAction();
actions$ = hot('-a', { a: action });
const expected = cold('-b', { b: new MyFailureAction(error) });
expect(effects.myEffect$).toBeObservable(expected);
});
});
在这个示例中,我们创建了一个名为MyEffects
的Effects类,并在其中定义了一个名为myEffect$
的Effect。在myEffect$
中,我们调用了一个名为apiCall
的服务方法,该方法返回一个Observable。在测试用例中,我们模拟了apiCall
方法的失败情况,并验证了在API调用失败时是否正确地触发了MyFailureAction
。
请注意,这只是一个简单的示例,实际情况中可能涉及更多的测试场景和操作。你可以根据具体的需求和代码结构进行适当的调整和扩展。
领取专属 10元无门槛券
手把手带您无忧上云