我一直在尝试搜索有关测试 Cycle.js 应用程序的指南,但似乎找不到。有人可以指点我一个指南或提供一些例子吗?
2 回答
来自Cycle.js.org:
Sources 和 sinks 可以很容易地用作Adapters 和 Ports。这也意味着测试主要是提供输入和检查输出的问题。不需要深度嘲讽。您的应用程序只是数据的纯粹转换。
确实,Cycle.js 核心的这个GitHub 问题中,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')
)的功能。
这是一个例子:
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
此处和mockDOMResponse
此处,
则可以找到Cycle.js 测试的 一些 示例。
您还可以查看Awesome Cycle.js 存储库的测试部分。
旁注:很快我们就可以编写Marble Tests了。不幸的是,目前仅支持rxjs v4的 Cycle.js 6 无法做到这一点。Marble 测试是 rxjs v5 的一个新特性。请参阅:Rxjs 测试 - 是否也可以在 RxJs 4 中使用大理石图?
有本指南以及有关循环核心 gitter 的许多有用的开发人员:http: //staltz.com/how-to-debug-rxjs-code.html