2

私は以下のように計算されたオブザーバブルのジャスミン仕様を書き込もうとしています:

self.positionDate = ko.computed(function () {
  var dateString = "";
  var start = moment(self.positionStartDate()).format("LL");
  var end = moment(self.positionEndDate()).format("LL");
  if (start !== end) {
    dateString = sprintf("%s - %s", start, end);
  }
  else {
    dateString = sprintf("%s", start);
  }
  return dateString;
}).extend({ throttle: 1 });

スロットルを使用すると、positionDate計算関数は更新されません。私は人為的に待機することと、valueHasMutated()を呼び出すことの両方を無駄にしようとしました。

誰かがスロットルされた計算で仕様を首尾よく書いたことがありますか?

4

1 に答える 1

3

の使用法により、観察可能な「非同期」を作成したため、Jasmineの非同期仕様機能throttleを使用する必要があります。

runsしたがって、 andwaits関数を次のように使用する必要があります。

describe('throttled obserable', function () {

    it('positionDate should be changed after positionStartDate changed', 
      function () {
        var vm = new ViewModel();

        runs(function () {
            vm.positionStartDate('January 21 2013');
            vm.positionEndDate('January 22 2013');
        });

        waits(1);

        runs(function () {
            expect(vm.positionDate())
                 .toEqual('January 21 2013 - January 22 2013');
            vm.positionStartDate('January 20 2013');
        });

        waits(1);

        runs(function () {
            expect(vm.positionDate())
                 .toEqual('January 20 2013 - January 22 2013');
        });
    });
});

デモJSFiddle

于 2013-01-21T20:15:53.143 に答える