javascript - 使用磁带进行 redux-saga 测试

标签 javascript redux redux-saga

我正在尝试对 redux-saga 进行测试。当我出于某种未知原因执行 Generator.next(data).value 时,数据不会传递到 saga 函数,如下所示:

const gen = onCreateMessage()

const message = "aa"

gen.next(message).value

///SAGA函数

export function* onCreateMessage(message) {

    yield put(addMessage(message.payload))

错误消息。无法读取未定义的有效负载。

最佳答案

问题是您的生成器函数接受消息作为参数,因此您需要在初始化生成器时传递该消息:

const gen = onCreateMessage( /* the message */ )

然后,您可以通过执行 gen.next().value 并验证您的断言来获取下一个值。

这是一个带有示例的 JS Bin:http://jsbin.com/catisu/edit?js,console

const { put, take } = ReduxSaga.effects;
const { expect } = chai;

const createMessage = message => ({
  type: 'CREATE_MESSAGE',
  payload: message,
});

const addMessage = message => ({
  type: 'ADD_MESSAGE',
  payload: message,
});

function* onCreateMessage(message) {
  yield put(addMessage(message.payload));
}

// In your test
const message = 'some message';

// Message is passed when the generator is initialized
const gen = onCreateMessage(createMessage(message))
let next = gen.next();

// Using Chai here but with tape it'd be the same concept
try {
  expect(next.value).to.eql(
    put(addMessage(message))
  );
  
  console.log('It works!');
} catch(e) {
  console.error('bummer');
}
<script src="https://npmcdn.com/redux-saga@0.11.1/dist/redux-saga.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>

也是一件小事,但看起来你的生成器正在期待一个带有 payload 键的对象,因此纯字符串不起作用。

关于javascript - 使用磁带进行 redux-saga 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414013/

相关文章:

reactjs - 如何通过 Redux 商店动态更新 Material UI 主题?

redux - 无法使用 redux-saga 从服务器产生 json 响应

javascript - mysql安装后无法解析fs、net、tls

javascript - 电话号码的谷歌事件跟踪

JavaScript:在 AWS Lambda 节点应用程序中将 RSS 转换为 JSON

redux - 为什么组件没有连接到 redux 商店?

reactjs - 在无 Flux 应用程序中使用 React `context` 访问模型更改器(mutator)是否合理?

javascript - API函数不返回值,即使返回有值

javascript - 如何通过 sudo 命令使用 forever-node?

javascript - 是否可以使用 HTML 按钮上传文件以供 W3C 文件 API 使用?