我决定在我的下一个JavaScript项目中采用TDD,并使用QUnit进行单元测试。我完全是新手,从未在任何语言中进行过单元测试。这里是我的一个模块的示例以及一个测试find
方法的测试,试图覆盖此方法将遇到的所有情况:
module("TextSwapper", {
setup: function() {
this.str = 'When you first start off trying to solve a problem, the first solutions you come up with are very complex, and most people stop there. But if you keep going, and live with the problem and peel more layers of the onion off, you can often times arrive at some very elegant and simple solutions.';
this.ts = new TextSwapper();
ok(this.ts, 'The TextSwapper was created successfully');
this.textarea = document.createElement('textarea');
this.textarea.value = this.str;
document.body.appendChild(this.textarea);
},
teardown: function() {
document.body.removeChild(this.textarea);
}
});
test("find()", function() {
equal(this.ts.find('When'), false, "Check it fails gracefully when no input has been set.");
this.textarea.focus();
equal(this.ts.find('When'), true, "Check it finds 'When' if the textarea has focus but no input has been set.");
this.ts.setInput(this.textarea);
this.ts.find('When');
equal(window.getSelection().toString(), 'When', 'The word \'When\' should be highlighted');
equal(this.ts.found[0][0], 'When', 'The word \'When\' should be in the found array');
this.ts.find('you');
equal(window.getSelection().toString(), 'you', 'The word \'you\' should be highlighted');
equal(this.ts.found[1][0], 'you', 'The word \'you\' should be in the found array');
equal(this.ts.found.length, 4 ,'Should have found 4 you\'s');
this.ts.find('bill');
equal(this.ts.found.length, 0, 'Check that nothing was found for \'bill\'');
this.ts.find('[a-z]*ee[a-z]*');
equal(window.getSelection().toString(), 'keep', 'The word \'keep\' should be highlighted');
equal(this.ts.found[1][0], 'peel', 'The word \'peel\' should be in the found array');
equal(this.ts.found.length, 2 ,'Should have found 2 for [a-z]*ee[a-z]*');
});
我的问题是,我这样做是否正确?我的测试中有太多的断言吗?我的测试应该分解成更小的测试吗?我一直在stackoverflow上阅读TDD相关内容,现在我已经读了一些东西,让我觉得我做错了。