我一直在尝试搜索有关测试Cycle.js应用的指南,但似乎无法找到它。有人可以请我指导或提供一些例子吗?
答案 0 :(得分:3)
来自Cycle.js.org:
源和汇可以很容易地用作Adapters and Ports。这也意味着测试主要是输入输入和检查输出。不需要深刻的嘲弄。您的应用程序只是数据的纯粹转换。
确实,来自Cycle.js核心的GitHub issue,Cycle.js的作者AndréStaltz解释说:
测试Cycle.js代码基本上只是关于测试Observables
最简单的测试采用以下形式:
// Create the mocked user events
const userEvents = mockDOMSource(...);
// Use them in your tests against `main`
const sinks = main({DOM: userEvents});
sinks.DOM.subscribe(function (vtree) {
// make assertions here on the vtree
});
请注意,我们在这里使用mockDOMSource
。
rx.js v5.3.0发布了mockDOMResponse
,后来被重命名为mockDOMSource
。这是一个可以轻松模拟用户交互的功能(模拟出DOM.select('.foo').events('click')
}等意图。
这是example:
test('CounterButton should increment number by 1 when clicked', t => {
t.plan(4)
const DOM = mockDOMSource({'.inc': {click: Observable.repeat({}, 3)}})
const sinks = CounterButton({DOM})
sinks.DOM
.take(4)
.toArray()
.subscribe(vtrees => {
const counts = vtrees.map(vt => vt.children[0].text.match(/\d+$/)[0])
t.equal(counts[0], '0', 'button has count 0')
t.equal(counts[1], '1', 'button has count 1')
t.equal(counts[2], '2', 'button has count 2')
t.equal(counts[3], '3', 'button has count 3')
})
})
如果您在GitHub中全球搜索mockDOMSource
here和mockDOMResponse
here
然后你可以find some examples进行Cycle.js测试。
您还可以查看Testing section回购邮件的Awesome Cycle.js。
旁注:很快我们就可以写Marble Tests了。不幸的是,只有支持rxjs v4的Cycle.js 6才能实现这一点。 大理石测试是rxjs v5的新功能。请参阅:Rxjs testing - is it possible to use marble diagrams also in RxJs 4?
答案 1 :(得分:1)
这篇指南加上很多有用的开发者核心gitter:http://staltz.com/how-to-debug-rxjs-code.html