テストケースの書き方には、次の2通りがある。Getting Started with JsTestDriverでは、プロトタイプを使っているが、『JavaScript実践入門』に習って、インライン宣言を使う。インライン宣言だと、テスト名に任意の文字列が使える。また、記述量も少なくなる。
- プロトタイプを使う
- インライン宣言を使う
TestCase('GreeterTest', {
setUp:function() {
// 必要に応じてセットアップ処理を実装する。
},
'test greet returns Hello World!':function() {
// Set up
var sut = new myapp.Greeter();
// Exercise
var actual = sut.greet('World');
// Verify
assertEquals('Hello World!', actual);
},
tearDown:function() {
// 必要に応じてティアダウン処理を実装する。
}
});
テストターゲットが非同期の場合は、TestCaseクラスではなくて、AsyncTestCaseクラスを使う。AsyncTestCase - js-test-driverのサンプルコードを元に、インライン宣言を使って書き直すと次のようになるはず(JsHintはおおよそ通したが未実行なので、修正が必要かもしれない)。また、高度な内容(コールバック関数の実行タイミングの制御など)はAsyncTestCase - js-test-driverを参照のこと。
AsyncTestCase('XhrTest', {
'test XHR using callbacks':function(queue) {
// Set up
var xhr = new XMLHttpRequest();
xhr.open('GET', '/some/path');
var responseStatus;
var responseBody;
queue.call('Step 1: send a request to the server and save the response status and body', function(callbacks) {
var onStatusReceived = callbacks.add(function(status) {
responseStatus = status;
});
var onBodyReceived = callbacks.add(function(body) {
responseBody = body;
});
xhr.onreadystatechange = function() {
if (xhr.readyState === 2) { // headers and status received
onStatusReceived(xhr.status);
} else if (xhr.readyState === 4) { // full body received
onBodyReceived(xhr.responseText);
}
};
// Exercise
xhr.send(null);
});
// Verify
queue.call('Step 2: assert the response status and body matches what we expect', function() {
assertEquals(200, responseStatus);
assertEquals('hello', responseBody);
});
}
});
0 件のコメント:
コメントを投稿