Spesifikasi Jasmine untuk atribut komputasi yang dibatasi

Saya mencoba menulis spesifikasi melati untuk observasi yang dihitung seperti di bawah ini:

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 });

Dengan throttle, fungsi yang dihitung positionDate tidak diperbarui. Saya sudah mencoba menunggu secara artifisial serta memanggil valueHasMutated() keduanya tidak berhasil.

Adakah yang berhasil menulis spesifikasi pada komputasi yang dibatasi?


person iterion    schedule 21.01.2013    source sumber


Jawaban (1)


Karena penggunaan throttle Anda membuat "async" yang dapat diamati sehingga Anda perlu menggunakan asynchronous fitur spesifikasi di Jasmine.

Jadi, Anda perlu menggunakan fungsi runs dan waits seperti:

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');
        });
    });
});

Demo JSFiddle.

person nemesv    schedule 21.01.2013