首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为redux-saga编写测试

为redux-saga编写测试
EN

Stack Overflow用户
提问于 2016-09-10 21:16:19
回答 1查看 241关注 0票数 0

我正在测试下面的saga函数

代码语言:javascript
复制
export function* fetchMessages(channel) {
    yield put(requestMessages())
    const channel_name = channel.payload
    try {
        const response = yield call(fetch,'/api/messages/'+channel_name)

        if(response.ok){
            const res = yield response.json();

            const date = moment().format('lll');
            yield put(receiveMessages(res,channel.payload,date))
        }


    } catch (error){
        yield put(rejectMessages(error))
    }
}

以下是我对第三和第四收益率的测试:

代码语言:javascript
复制
const gen = onFetchMessages(fetchMessages(channel))
////where export const fetchMessages = createAction(LOAD_MESSAGES);
const channel = "channel 9"
const response = []

    assert.deepEqual(
        gen.next(response).value,
        response.json,
        'should convert response to json'
    )

    const date = Date.now();
    assert.deepEqual(
        gen.next(response,channel,date).value,
        put(receiveMessages(response,channel,date)),
        'should dispatch LOAD_MESSAGES_SUCCESS with payloads of response, channel and date'
    )

实际返回未定义,即gen.next(response,channel,date).value返回未定义。你能告诉我测试这些东西的正确方法吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-09-23 23:17:15

不太确定你的代码想要做什么。此函数的正确测试可能如下所示:

代码语言:javascript
复制
import { put, call } from 'redux-saga/effects';

// success route
const arg = fetchMessage(channel);
let gen = onFetchMessage(arg);
assert.deepEqual(
  gen.next().value,
  put(requestMessages()),
  'should ...'
);

assert.deepEqual(
  gen.next().value,
  call(fetch, 'api/messages/' + arg.payload),
  'should ...'
);

assert.deepEqual(
  gen.next({ ok: true, json: () => 'test data' }).value,
  'test data',
  'should ...'
);

assert.deepEqual(
  gen.next('test res').value,
  put(receiveMessage('test res', arg.payload, moment().format('lll')), // you may need to get date from args, if date does not match
  'should ...'
);

assert.deepEqual(
  gen.next().done,
  true,
  'should ...'
);

// unsuccessful route
const arg = fetchMessage(channel);
let gen = onFetchMessage(arg);
gen.next();
gen.next();

assert.deepEqual(
  gen.next({ ok: false, json: () => 'test data' }).done,
  true,
  'should ...'
);

// exception route
const arg = fetchMessage(channel);
let gen = onFetchMessage(arg);
gen.next();
gen.next();

assert.deepEqual(
  gen.throw('some error').value,
  put(rejectMessage('some error'),
  'should ...'
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39426442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档