2014年08月05日

Jasmine入門

Jasmineは様々な機能が盛り込まれた汎用型のJavaScriptテストフレームワーク。

ダウンロードしたファイルの中からdist/jasmine-standalone-2.0.1.zipを解凍して利用します。以下のようにtest用のHTMLを作成しします。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jasmine Example</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.1/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine-2.0.1/jasmine.css">
<script src="lib/jasmine-2.0.1/jasmine.js"></script>
<script src="lib/jasmine-2.0.1/jasmine-html.js"></script>
<script src="lib/jasmine-2.0.1/boot.js"></script>
<script src="テストするJS"></script>
<script>
//テストコード
</script>
</head>
<body>
</body>
</html>


テストコードではdescribe()で見出しをつけて記述していきます。

describe('テスト内容', function() {
//テストコード
});


describe()は入れ子でも利用できます。

describe('テスト内容1', function() {
describe('テスト内容1-1', function() {
//テストコード
});
describe('テスト内容1-2', function() {
//テストコード
});
});



テストはit()を利用して記述します。

describe('テスト内容', function() {
it("メソッドが存在する", function() {
//テストコード
});
});


実際のテストでは以下のアサーションメソッドを利用利します。

expect(A).toEqual(B)

expect(A).toEqual(B)でAとBの値が等しいかテストを行います。

describe('テスト内容', function() {
it('expect("a").toEqual("a")', function() {
expect("a").toEqual("a");
});
});


expect(A).toBe(B)

expect(A).toBe(B)でAとBが同じオブジェクトかテストを行います。

以下の場合は異なるオブジェクトとしてテストは失敗します。

describe('テスト内容', function() {
it('expect(bar1).toBe(bar2)', function() {
var bar1 = {"foo":"daaa"};
var bar2 = {"foo":"daaa"};
expect(bar1).toBe(bar2);
});
});


以下の場合は同じオブジェクトとしてテストは成功します。

describe('テスト内容', function() {
it('expect(bar1).toBe(bar2)', function() {
var bar1 = {"foo":"daaa"};
var bar2 = bar1;
expect(bar1).toBe(bar2);
});
});


expext(A).toBeDefined()

expext(A).toBeDefined()ではAが定義されているかテストをします。

以下の場合はbar1は定義されていないのでテストは失敗します。

describe('テスト内容', function() {
it('expect(bar1).toBeDefined()', function() {
expect(bar1).toBeDefined();
});
});


以下の場合はbar1は定義されているのでテストは成功します。

describe('テスト内容', function() {
it('expect(bar1).toBeDefined()', function() {
var bar1="aa";
expect(bar1).toBeDefined();
});
});


他にも、

expect(A).toBeNull()でAがNULLであるかテストを行う
expect(A).toBeTruthy()でAがtrueであるかテストを行う
expect(A).toBeFalsy()でAがfalseであるかテストを行う
expect(A).toContain(B)でAにBが含まれているかテストを行う
expect(A).toBeLessThan(B)でAよりBが小さいかテストを行う
expect(A).toBeGreaterThan(b)でBよりAが小さいかテストを行う
expect(fn).toThrow(e)でfnが例外をスローするかテストを行う

などが可能です。

beforeEach()やafterEach()を利用するとit()が実行される前後に処理を差し込むことができます。

次のようなコードを実行すると

describe('テスト内容', function() {
beforeEach(function(){
console.log("beforeEach");
});
it('test1', function() {
console.log("test1");
expect("a").toEqual("a");
});
it('test2', function() {
console.log("test2");
expect("a").toEqual("a");
});
afterEach(function(){
console.log("afterEach");
});
});


以下の様にコンソールが表示されます

beforeEach
test1
afterEach
beforeEach
test2
afterEach


参考 : JasmineによるJavaScriptのテスト その4 « サーバーワークス エンジニアブログ
タグ:test JASMINE
posted by ねこまんま at 17:15 | Comment(0) | TrackBack(0) | test | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック