2016-11-10 63 views
0

我有以下功能和規格。我已經創建了間諜日期對象,我正在傳遞和操縱我的功能。但是間諜不是在rightDate上創建的。你們能幫我解決這個問題嗎?如何在茉莉花測試中創建日期函數

var jasmineFunc = new function(leftDate, rightDate){ 

    var leftDateFormat= leftDate.format("H:mm"); 

    rightDate= new Date(rightDate- 60000); 

    var rightDateFormat = rightDate.format("H:mm"); 

    } 

Spec: 

describe("format", function(){ 

    var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0); 

    var rightDate= new Date(2016, 0, 1, 2, 0, 0, 0); 

    spyOn(leftDate,"format").and,returnValue("00:00"); 

    spyOn(rightDate, "format").and.returnValue("00:59"); 
}); 

回答

0

您的代碼存在一些錯誤。

  • 有一個逗號(,)之間&的returnValue,它應該是一個 點(。)
  • 沒有叫Date對象格式的功能,我的鉻 肯定沒有提出任何方法,這樣
  • 您沒有使用功能,可類似於 @Test在Java中(見下面的代碼)
  • 回答您的評論有關的原型,這也應該工作, 請用間諜格式替換getHours來嘗試一下。

但我嘲笑的方法for your reference and it works

var jasmineFunc = function(leftDate, rightDate) { 
    var leftDateFormat = leftDate.format("H:mm"); 
    rightDate = new Date(rightDate - 60000); 
    var rightDateFormat = rightDate.format("H:mm"); 
} 

Date.prototype.format = function() { 
return "This formats the text"; 
} 



describe("format", function() { 
it('tempSpec', function() { 
    var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0); 
    var rightDate = new Date(2016, 0, 1, 2, 0, 0, 0); 
    spyOn(leftDate, "getHours").and.returnValue("00:00"); 
    spyOn(rightDate, "getHours").and.returnValue("00:59"); 
    spyOn(leftDate, "format").and.returnValue("I've hijacked it in the spy"); 

    var dt = leftDate.getHours() 
    var txt = leftDate.format() 
    expect(dt).toEqual("00:00"); 
    expect(txt).toEqual("I've hijacked it in the spy"); 
    }) 
}); 
  • 僅供參考下面是js的日期格式一些information,它採用了 平原構造函數的格式。
  • 同樣出於好奇,我可能會問你爲什麼你想測試一個 API代碼,您應該測試自己的代碼,因爲這些API的 已經經過徹底

這裏是一個更新版本的代碼,我想我終於明白你的意思是被對象改變了,它被重新分配了。 那麼改變了什麼?

var jasmineFunc = { 
    testFunc: function(leftDate, rightDate) { 
    var leftDateFormat = this.formatFunc(leftDate); 
    rightDate = new Date(rightDate - 60000); 
    var rightDateFormat = this.formatFunc(rightDate); 
    return {'left' : leftDateFormat, 'right' : rightDateFormat} 
    }, 

    formatFunc: function(value) { 
    return value.format("H:mm") 
    } 

} 

Date.prototype.format = function() { 
    return "This formats the text"; 
} 


describe("format Spec", function() { 
    it('tempSpec', function() { 
    var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0); 
    var rightDate = new Date(2016, 0, 1, 2, 0, 0, 0); 
    spyOn(jasmineFunc, "formatFunc").and.returnValue("Some arbitrary Value"); 
     var testObj = jasmineFunc.testFunc(leftDate, rightDate); 
     expect(testObj.left).toEqual("Some arbitrary Value"); 
     expect(testObj.right).toEqual("Some arbitrary Value"); 
    }); 

}); 
  • 既然你正在重用的變量,我已經委派格式 另一個函數,這樣我可以按我的要求嘲笑它。
  • 請注意,我不再需要模擬日期原型,我可以簡單地使用 模擬中間函數,因此您可以根據需要重新分配它多達 次。
+0

對不起,現在提到格式是Date的原型方法(Date.prototype.format = function(){....};如何在這些類型的方法上創建間諜? –

+0

檢出小提琴,爲你更新原型 –

+0

感謝您的努力,但我不想窺探getHours。而偵察leftDate在這裏是直截了當的,但rightDate對象正在改變功能,間諜不在那個上工作 –