在Angular Ngrx测试中,有时可能会遇到Store.overrideSelector不起作用的问题。这可能是由于一些常见的错误导致的,下面是一些可能的解决方法:
import { StoreModule } from '@ngrx/store';
import { provideMockStore } from '@ngrx/store/testing';
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.forRoot({}),
],
providers: [
provideMockStore(),
],
});
});
import { selectCount } from './counter.selectors';
describe('CounterComponent', () => {
let store: Store;
beforeEach(() => {
TestBed.configureTestingModule({
// ...
});
store = TestBed.inject(Store);
store.overrideSelector(selectCount, 0); // 覆盖选择器
});
it('should display the correct count', () => {
const fixture = TestBed.createComponent(CounterComponent);
const component = fixture.componentInstance;
fixture.detectChanges();
const countElement = fixture.nativeElement.querySelector('.count');
expect(countElement.textContent).toContain('0'); // 校验选择器的值
});
});
import * as CounterActions from './counter.actions';
it('should increment count when increment button is clicked', () => {
const fixture = TestBed.createComponent(CounterComponent);
const component = fixture.componentInstance;
fixture.detectChanges();
const incrementButton = fixture.nativeElement.querySelector('.increment');
incrementButton.click();
store.dispatch(CounterActions.increment()); // 派发Action
store.select(selectCount).subscribe(count => {
expect(count).toBe(1); // 校验状态更新
});
});
通过检查以上几点,你应该能够解决Angular Ngrx测试中Store.overrideSelector不起作用的问题。