Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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
Javascript 将值传递到Redux Saga中的'next'函数_Javascript_Reactjs_Ecmascript 6_Redux Saga - Fatal编程技术网

Javascript 将值传递到Redux Saga中的'next'函数

Javascript 将值传递到Redux Saga中的'next'函数,javascript,reactjs,ecmascript-6,redux-saga,Javascript,Reactjs,Ecmascript 6,Redux Saga,我有一个传奇故事: export function* loadData() { const requestURL = 'http://www.web.address/thing'; try { const data = yield call(getRequest, requestURL); yield put(dataLoaded(data)); } catch (err) { yield put(dataError(err)); } } 我试着这样测试

我有一个传奇故事:

export function* loadData() {
  const requestURL = 'http://www.web.address/thing';
  try {
    const data = yield call(getRequest, requestURL);
    yield put(dataLoaded(data));
  } catch (err) {
    yield put(dataError(err));
  }
}
我试着这样测试它:

describe('loadData saga', () => {
  describe('200 response', () => {
    const getReq = jest.fn();
    const requestURL = 'mock.url.com';
    const generator = cloneableGenerator(loadData)();

    it('sends the request to the correct url', () => {
      expect(generator.next(getReq, requestURL).value).toEqual(call(getReq, requestURL));
    });
});
这个测试失败了,因为生成器似乎没有注意到我传递给下一个函数的内容,我不知道为什么。也就是说,测试接收
http://www.web.address/thing
作为url和
getRequest
函数,而不是我试图在
.next()
函数中传递的内容

这也不起作用:

generator.next(getReq(requestURL))

我误解了什么?

您实际上不应该在这里将任何参数传递到next(),因为您的传奇没有以前的收益,也没有将以前收益的任何动态数据传递到
调用
-它已经在范围内了

因此,在测试中,您将检查next()。值与使用非模拟值时的预期值相同

import {getRequest} from 'same/place/as/saga/loads/getRequest';
const requestURL = 'http://www.web.address/thing';

expect(generator.next().value).toEqual(call(getRequest, requestURL));
你的问题是你试图模仿和传递存根,而在这种情况下,传奇无法注入它们

请记住,
yield
将停止生成器的执行,直到下一次迭代,因此您实际上并不是在这里运行请求,而是停止并接收如何调用
getRequest
以及要传递的参数的指令对象

但是,在上述测试之后使用
.next(someData)
将允许您传入模拟数据,作为对请求响应的模拟

const mockData = {};
expect(generator.next(mockData).value).toEqual(put(dataLoaded(mockData)))

将args to next()视为允许模拟上一个收益的返回值

您不应该在此处将任何args传递到next(),因为您的saga没有上一个收益,也没有将任何动态数据从上一个收益传递到
调用
-它已经在范围内了所需的一切

因此,在测试中,您将检查next()。值与使用非模拟值时的预期值相同

import {getRequest} from 'same/place/as/saga/loads/getRequest';
const requestURL = 'http://www.web.address/thing';

expect(generator.next().value).toEqual(call(getRequest, requestURL));
你的问题是你试图模仿和传递存根,而在这种情况下,传奇无法注入它们

请记住,
yield
将停止生成器的执行,直到下一次迭代,因此您实际上并不是在这里运行请求,而是停止并接收如何调用
getRequest
以及要传递的参数的指令对象

但是,在上述测试之后使用
.next(someData)
将允许您传入模拟数据,作为对请求响应的模拟

const mockData = {};
expect(generator.next(mockData).value).toEqual(put(dataLoaded(mockData)))
将args to next()视为允许模拟上一个产量的返回值

“将args to next()视为允许模拟上一个产量的返回值”英雄。这就是我错过的谢谢!将args to next()视为允许模拟上一个yield“HERO”的返回值。这就是我错过的谢谢!