NGXS:测试动作

时间:2018-09-07 13:53:31

标签: angular ngxs

我对angular&ngxs还是很陌生,并且正在编写一个小型消息服务,从而有机会通过连接到Firebase的ngxs存储发送和接收消息。

我正在尝试为发送消息的方法编写测试。由于我不太了解ngxs官方测试文档,因此遇到了一些问题。

因此,我目前(无效)的测试尝试是:

describe('SendMessage', () => {
    let store: Store;
    let testData: Message = {
    author: 'testauthor',
    text: 'testtext'
}; 

    beforeEach(async(() => {

        TestBed.configureTestingModule({
        imports: [NgxsModule.forRoot([MessageState]),
            NgxsModule.forRoot([AngularFirestore])],
        }).compileComponents();

        store = TestBed.get(Store);
        store.reset(TEST_STATE);
     }));

    it('sends Messages', async(() => {
        store.dispatch(new fromMessage.AddMessage(testData));
        store.selectOnce(state => MessageState.getSentMessages).subscribe(message => {
           expect(message).toEqual(testData);
    })
   }))   
});

TEST_STATE为

export const TEST_STATE = {
    messages: [{
    author: 'testauthor',
    text: 'testtext'
    }]
}

运行测试,出现错误Failed: States must be decorated with @State() decorator

如何正确使用TEST_STATE作为测试AddMessage的状态?我的调度和选择应该如何?

正如我所说,我是ngxs和测试的新手,如果我的代码不太好,请见谅。 感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

测试平台的import语句中有两行可能会产生错误Failed: States must be decorated with @State() decorator

  1. NgxsModule.forRoot([MessageState])和
  2. NgxsModule.forRoot([AngularFirestore])

请仔细检查类MessageStateAngularFirestore是否用@State()装饰。