1

JavaScript で明らかにするパターンと初期クラスのインスタンス化を使用しています。私も Jasmine を使用してこのクラスをテストしていますが、各テストを実行する前に myNamespace.myViewModel の状態をリセットする方法が必要です (これは単純な例ですが、複数の変数を持つ複雑なビュー モデルを想像してください)。

クラスの例を次に示します。

myNamespace.myViewModel = (function(ko, $, window){
   var init = function(){},
       name = 'bob',
       nameSetter = function(value){ name = value; };
   return {
     Init: init,
     Name: name,
     NameSetter: nameSetter
   };
}(ko, $, window));

ジャスミンでは、次のことから始めます。

describe("VM Specs", function () {
    'use strict';
    var vm;
    beforeEach(function(){
       // the vm isn't re-created since it is a "static" class in memory
       vm = myNameSpace.myViewModel;
    });
    it("should set name", function(){
       vm.NameSetter('joe');
       expect(vm.Name === 'joe').toBeTruthy();
    });
    it("should have the default state, even after the other test ran", function(){
       expect(vm.Name === 'bob').toBeTruthy();
    });
});

これを行う方法はありますか?

4

2 に答える 2

2

できません。パターンが行うすべての原因は、クロージャにバインドされたいくつかの変数を持つ新しいオブジェクトを作成することです。したがって、これをアプリで使用しても、このオブジェクトの状態を中継することはできず、新しいバージョンを作成することはできません。また、classこのパターンから新しいインスタンスを作成できないため、このパターンを正しく説明していません。したがって、この場合、これが適切なパターンであるかどうかを自問する必要があります。

于 2013-01-17T09:43:58.307 に答える
0

機能がありafterEach()ます。beforeEach()テストの実行後と同じように機能します。

afterEach(function(){
    //reset the state here!
});
于 2013-01-15T16:08:52.497 に答える