似乎找不到有关测试Cycle.js应用的资源

时间:2016-01-23 16:55:33

标签: javascript testing web reactive-programming cyclejs

我一直在尝试搜索有关测试Cycle.js应用的指南,但似乎无法找到它。有人可以请我指导或提供一些例子吗?

2 个答案:

答案 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 heremockDOMResponse 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