2016-04-25 10 views
1

javascriptでは、以下のような異なる方法で同じ関数を書くことができます。これはテストに簡単にどちらの方法であるJavaスクリプトでユニットテスト関数を書くためのより良い方法は何ですか?

// 1st way ============ 
var app = {}; 
app.name = "abc" 
app.init = function() { 
    return "test"; 
}; 

// 2nd way ============ 
function app() { 
    this.name = "abc"; 
}; 
app.prototype.init = function() { 
    return "test"; 
}; 

答えて

1

ユニットテストのシナリオに最適です:

// 1st way 
assert.equal(app.name, 'abc') 
assert.equal(app.init(), 'test') 

// 2nd way 
var appInstance = new app() 
assert.equal(appInstance.name, 'abc') 
assert.equal(appInstance.init(), 'test') 

しかし、「第二の方法」でアプリが大文字(コンストラクタは大文字開始すべきであるとして)でなければなりません。

var appはグローバル変数としてエクスポートする必要があり、テストを変更可能なグローバルオブジェクト(副作用)に書き直すことは難しいため、テストするのが少し難しいかもしれません。したがって

私はあなたが(モカを使用した場合)(再)beforeEachにctorのを呼び出すことがクリーンなテスト・セットアップを作成することができるよう、「第二の方法」を使用することをお勧めします:

describe('the app'', function() { 
    var app 
    beforeEach(function() { 
    app = new App() 
    }) 

    it(...) 
    it(...) 
}) 

プロトタイプが気に入らなければ、同じようなテスト容易性を実現するためにこのように使用することができます。

var createApp = function() { 
    var app = {}; 
    app.name = "abc" 
    app.init = function() { 
    return "test"; 
    }; 
    return app; 
} 
関連する問題