2012-02-22 23 views
1

任何人都可以告訴我爲什麼下面的測試失敗。Jasmine's spyOn toHaveBeenCalled方法問題

var Person = function() {}; 

Person.prototype.helloSomeone = function(toGreet) { 
    return this.sayHello() + " " + toGreet; 
}; 

Person.prototype.sayHello = function() { 
    return "Hello"; 
}; 

describe("Person", function() { 
it("calls the sayHello() function", function() { 
    var fakePerson = new Person(); 
    spyOn(fakePerson, "sayHello"); 
    fakePerson.helloSomeone("world"); 
    expect(fakePerson.sayHello).toHaveBeenCalled(); 
    }); 
}); 

我把它從here,他說它的工作原理。我可以看到spyOn方法在person對象上創建了一個相同名稱的包裝函數,即在對象上調用fakePerson.sayHello,而不是在原型上調用fakePerson.sayHello。

非常感謝

+0

測試失敗,因爲我也在使用jasmine-sinon.js。不知道爲什麼只有當我刪除它時,測試纔開始。 – screenm0nkey 2012-02-22 15:32:18

+0

嗨screenm0nkey,你可能會感興趣爲什麼我認爲在這種使用情況下使用'toHaveBeenCalled'不是最好的選擇:http://stackoverflow.com/a/16851650/705888 – basecode 2014-04-25 02:58:41

回答

8

測試失敗,因爲我也在使用jasmine-sinon.js。

+0

謝謝你更新這個,我一直在看我在做什麼間諜,只要我切換到它的工作的sinon語法。我沒有意識到這個項目正在使用sinon。 – taylonr 2013-11-29 17:23:51

+0

不應該將此代碼用作有或無sinon的常規jasmine語法? – 2014-03-05 14:53:10

4

和您的測試用例一個可能的問題是,你有沒有指定的原始方法應該被調用。什麼將有一個適當的行爲是下面的(注意「andCallThrough」):

describe("Person", function() { 
it("calls the sayHello() function", function() { 
    var fakePerson = new Person(); 
    spyOn(fakePerson, "sayHello").andCallThrough(); 
    fakePerson.helloSomeone("world"); 
    expect(fakePerson.sayHello).toHaveBeenCalled(); 
    }); 
}); 

你可以看到茉莉花的文檔頁面有關其他可能性的更多信息:https://github.com/pivotal/jasmine/wiki/Spies

編輯:快看在jasmine-sinon documentation帶來了以下內容:

警告

jasmine-sinon目前覆蓋任何用於其自己的間諜功能的同名Jasmine匹配器。我計劃在將來允許這些選項被保留。

時重寫的本地茉莉花匹配器有:

  • toHaveBeenCalled()
  • toHaveBeenCalledWith()

如果您想要使用茉莉花,你必須使用他們的API而不是茉莉花。

編輯:作爲Feb 2012

您還可以使用茉莉花間諜旁邊的興農間諜。 jasmine-sinon會檢測你正在使用的是哪一個,並使用適當的匹配器。

+0

感謝您的迴應,但它沒有'工作。 – screenm0nkey 2012-02-22 14:45:19

+0

@ screenm0nkey您可以在這種情況下更具體地瞭解您所期待的內容,以及您在測試失敗時獲得的錯誤。 – HoLyVieR 2012-02-22 14:46:41

+0

那麼,我希望測試通過,因爲它應該。由於我複製了https://github.com/pivotal/jasmine/wiki/Spies中的示例,因此間諜工作不正常,也失敗了。我想我的設置有問題。 – screenm0nkey 2012-02-22 15:14:39