簡體   English   中英

Jasmine spy 期望用“Object(...)”調用

[英]Jasmine spy expects to be called with "Object(...)"

我正在完成從 Jasmine 1.3 到 2.0 的遷移。 到目前為止,我已經重構了大部分代碼以符合 2.0 的更新語法。 但是,某些類型的測試仍然失敗。

簡而言之,我的測試如下所示:

var obj = new CustomCriteria();

spyOn(my, "function");
my.function(obj);
expect(my.function).toHaveBeenCalledWith({ big: "fat object" });

我的CustomCriteria類:

var CustomCriteria = function() {
    this.big = "fat object";
};

測試失敗,原因如下:

Expected spy function to have been called with [ Object({ big: "fat object" }) ] but actual calls were [ ({ big: "fat object" }) ].

請注意期望如何有一個“ Object ”環繞它,但第二個沒有。 這個測試在 Jasmine < 2.0 中沒有失敗,但在我更新 Jasmine 后現在失敗了。 我怎樣才能解決這個問題?

更新:我修改了通過new function與對象字面量語法創建新對象的function ,看起來__proto__ s 是不同的。 也許這會影響茉莉花的平等比較?

在版本 2 之前,如果對象具有相同的屬性和值,則對象相等(請參閱v1.3.1 代碼

從版本 2 開始,還比較了對象構造函數(請參閱v2.0 代碼)。

在您的情況下: CustomCriteria{}沒有相同的構造函數。

PS:異常消息也更改為在其中包含構造函數名稱。

var x = {a:1}; var y ={a:1};

x 和 y 將無法在 jasmine 中進行比較(我相信它使用 ===),因為 x 和 y 只是對對象文字的引用。

expect(my.function).toHaveBeenCalledWith(obj)不會失敗,因為對象引用會匹配。 如果您沒有要比較的確切對象引用,您可以使用 my.function.calls 檢查調用的參數以檢查某些字段的相等性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM