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 和测试的新手,如果我的代码不太好,我很抱歉。谢谢你的帮助!
解决方案
测试平台的导入语句中有两行可能会产生错误Failed: States must be decorated with @State() decorator
:
- NgxsModule.forRoot([MessageState]) 和
- NgxsModule.forRoot([AngularFirestore])
请仔细检查类MessageState
和 AngularFirestore
是否用@State()
.
推荐阅读
- r - 向每个方面添加不同的 geom_segment
- json - 浏览轮播卡不适用于 Dialogflow 中的谷歌助手
- mysql - 列表中具有重复值的 SQL 查询
- javascript - 如何在多个测试之间共享笑话模拟?
- databricks - 自动化将作业运行日志导出到 DBFS 的过程
- docker - IdentityServer4 - docker-compose 的行为与手动运行不同
- xml - 使用 SAXON / XQuery 编写输出文件
- c++ - 分离一个类方法并在 C++ 中异步运行它
- sql - 如何从 SQL 中删除重复的字段
- javascript - TypeError:undefined 不是评估 this.state.items 的对象