首页 > 解决方案 > 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 和测试的新手,如果我的代码不太好,我很抱歉。谢谢你的帮助!

标签: angularngxs

解决方案


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

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

请仔细检查类MessageStateAngularFirestore是否用@State().


推荐阅读