ข้อมูลจำเพาะของ 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 });

เมื่อคันเร่ง ฟังก์ชันคำนวณ dateDate จะไม่ได้รับการอัพเดต ฉันได้ลองใช้การรอแบบเทียมและการเรียก valueHasMutated() ทั้งสองอย่างโดยไม่เกิดประโยชน์

มีใครเขียนข้อมูลจำเพาะบนคอมพิวเตอร์ที่มีการควบคุมปริมาณสำเร็จหรือไม่


person iterion    schedule 21.01.2013    source แหล่งที่มา


คำตอบ (1)


เนื่องจากการใช้ throttle คุณจึงสร้าง "async" ที่สังเกตได้ ดังนั้นคุณจึงจำเป็นต้องใช้ แบบอะซิงโครนัส คุณสมบัติข้อมูลจำเพาะในจัสมิน

ดังนั้นคุณต้องใช้ฟังก์ชัน 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