Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular/NGXS,无法根据失败的API请求测试操作_Angular_Rxjs_Jasmine_Ngxs - Fatal编程技术网

Angular/NGXS,无法根据失败的API请求测试操作

Angular/NGXS,无法根据失败的API请求测试操作,angular,rxjs,jasmine,ngxs,Angular,Rxjs,Jasmine,Ngxs,我在尝试为调用http请求的NGXS操作编写测试时遇到问题。我想添加一些测试,以防请求成功或失败 我的行动: @Action(SearchChuckNorrisJokes) searchChuckNorrisJokes({ getState, setState }: StateContext<ChuckNorrisStateModel>, { searchString }: SearchChuckNorrisJokes) { // Handle loa

我在尝试为调用http请求的NGXS操作编写测试时遇到问题。我想添加一些测试,以防请求成功或失败

我的行动:

    @Action(SearchChuckNorrisJokes)
    searchChuckNorrisJokes({ getState, setState }: StateContext<ChuckNorrisStateModel>, { searchString }: SearchChuckNorrisJokes) {
        // Handle loading
        const state = getState();
        return this.chuckNorrisService.fetchCustomChuckNorrisJokes(searchString).subscribe(
            res => {
                setState({
                    ...state,
                    loading: false,
                    error: false,
                    chuckData: res['result'],
                });
            }, err => {
                setState({
                    ...state,
                    loading: false,
                    error: true,
                });
                return throwError(err);
            }
        );
我相信我在监视状态/服务,但由于我使用的是NGXS存储,因此它没有看到我的“我”模仿了响应


如果需要,我很乐意提供更多信息。在过去一天左右的时间里,我一直在努力解决这个问题,很惊讶没有更多关于测试NGXS失败API调用的信息…

我同意Shadow的观点。一旦你通过管道发送服务呼叫并返回可观察到的消息,你模仿“FetchCustomChuckNorrisChakes”的模式应该适合你。我也不知道你为什么要在规范中使用ChuckNorrisState。

我同意Shadow。一旦你通过管道发送服务呼叫并返回可观察到的消息,你模仿“FetchCustomChuckNorrisChakes”的模式应该适合你。我也不知道你为什么要在规范中使用ChuckNorrisState。

谢谢大家,我需要用管道发送响应,而不是订阅响应。非常感谢。。更新代码,以防任何人卡住:

声明:

    @Action(SearchChuckNorrisJokes)
    searchChuckNorrisJokes({ getState, setState }: StateContext<ChuckNorrisStateModel>, { searchString }: SearchChuckNorrisJokes) {
        // Handle loading
        const state = getState();
        return this.chuckNorrisService.fetchCustomChuckNorrisJokes(searchString).pipe(
            tap(res => {
                setState({
                    ...state,
                    loading: false,
                    error: false,
                    chuckData: res['result'],
                });
            }),
            catchError(err => {
                setState({
                    ...state,
                    loading: false,
                    error: true,
                });
                return of(err);
            })
        );
    }

谢谢大家,我需要通过管道发送回复,而不是订阅。非常感谢。。更新代码,以防任何人卡住:

声明:

    @Action(SearchChuckNorrisJokes)
    searchChuckNorrisJokes({ getState, setState }: StateContext<ChuckNorrisStateModel>, { searchString }: SearchChuckNorrisJokes) {
        // Handle loading
        const state = getState();
        return this.chuckNorrisService.fetchCustomChuckNorrisJokes(searchString).pipe(
            tap(res => {
                setState({
                    ...state,
                    loading: false,
                    error: false,
                    chuckData: res['result'],
                });
            }),
            catchError(err => {
                setState({
                    ...state,
                    loading: false,
                    error: true,
                });
                return of(err);
            })
        );
    }

测试中的投掷者是什么?它返回什么?您的方法无效,您永远不应该在操作处理程序中订阅。您还返回了
Subscription
类的一个实例,而NGXS不知道如何处理它。测试中的
throwerr
是什么?它返回什么?您的方法无效,您永远不应该在操作处理程序中订阅。您还返回了
Subscription
类的一个实例,NGXS不知道如何处理它。
    it('should toggle a failed API call', () => {
        spyOn(apiService, 'fetchCustomChuckNorrisJokes').and.returnValue(throwError({}));
        store.dispatch(new SearchChuckNorrisJokes(null));
        store.selectOnce(state => state.chuckData).subscribe(data => {
            expect(data.error).toBe(true);
        });
    });