Спецификация Jasmine для регулируемого вычисляемого атрибута

Я пытаюсь написать спецификацию жасмина для вычисляемой наблюдаемой, как показано ниже:

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() безрезультатно.

Кто-нибудь успешно написал спецификацию для дросселируемых вычислений?


person iterion    schedule 21.01.2013    source источник


Ответы (1)


Из-за использования throttle вы сделали свой наблюдаемый «асинхронный», поэтому вам нужно использовать асинхронный функции спецификации в Jasmine.

Поэтому вам нужно использовать функции runs и waits примерно так:

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.

person nemesv    schedule 21.01.2013