为测试准备代码
Preparing code for testing
如果我有这样一个函数:
function batchByTime(obs) {
return obs.bufferWithTime(300).take(10);
}
,我想这样测试它:
var onNext = Rx.ReactiveTest.onNext,
onCompleted = Rx.ReactiveTest.onCompleted,
subscribe = Rx.ReactiveTest.subscribe;
QUnit.test("hello test", function(assert) {
var scheduler = new Rx.TestScheduler();
var samplesObservable = scheduler.createHotObservable(
onNext(100, 1),
onNext(200, 2),
onNext(450, 3),
onNext(1000, 4),
onCompleted(1100)
);
var results = scheduler.
startWithTiming(function() {
return batchByTime(samplesObservable);
}, 0, 0, 1200);
var msgs = results.messages;
assert.equal(msgs[0].toString(), onNext(300, [1, 2]).toString());
assert.equal(msgs[0].toString(), onNext(600, [3]).toString());
assert.equal(msgs[0].toString(), onNext(900, [4]).toString());
});
我希望这能工作,但相反,我一次收到所有通知,接收:
Expected:
"OnNext(1,2)@300"
Result:
"OnNext(1,2,3,4)@1100"
表示每个断言。
我明白,如果我将TestScheduler scheduler
传递给batchByTime
,并将此调度器用作bufferWithTime
操作符中的参数,这将起作用。但这不是违背了测试的全部目的吗?理想情况下,我不需要修改原始代码来测试它。
正如原问题的评论者指出的那样,通过使用可能的调度器对代码进行参数化,如果没有提供调度器,则使用bufferWithTime
中的默认调度器,从而使代码更易于测试。
相关文章:
- 为函数代码编写测试
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 如何使用KARMA对React JSX ES6代码进行单元测试
- 我的CSS/Javascript下拉菜单测试代码出了什么问题
- 编写可测试的JavaScript代码
- 有人能解释一下evaluate()和dragAndDrop()在下面的角度测试代码中调用了什么吗
- 如何在单元测试中使用此JavaScript代码
- 我怎么能用jasmine测试这个代码呢
- 单元测试Angular自举代码
- 如何使用MochaJS测试jQuery代码
- 为es6传输的测试代码
- 如何在ajax请求和it上测试并获得完整的代码覆盖率's使用Jasmine和Blanket.js对jQuery
- 基准测试引发错误的异步与同步代码
- 在C#中,我如何对客户端用户交互和javascript(jQuery)代码进行单元测试
- Javascript代码集成测试
- 在单元测试中实现逻辑,以缩短语法并提高测试代码的可重用性
- 动态更改测试中代码覆盖率的require语句的更好方法
- 为什么这些代码在我的测试服务器上有效,而在jsfiddle上无效
- Amazon Cloud (AWS) 中的代码-测试-代码周期
- 代码可以在代码测试器中工作,但不能在地址栏中工作