簡體   English   中英

使用Chai JS進行自動化測試

[英]Automated testing with chai js

我想加載配置文件進行測試。

參數之一是類型。

那么我該如何替換下一行。

expect(res.body).to.deep.equal(test.expect

與“ to.deep.equal”字符串。

我試過了 :

let exp = expect(res.body);
test.type.split('.').forEach(t => exp = exp[t])
exp(test.expect)

但是后來我得到了:

Uncaught TypeError: this.assert is not a function
  at assertEqual (node_modules\chai\lib\chai\core\assertions.js:1026:12)

編輯:

我設法通過以下方式做到這一點:

let exp = expect(res.body);
test.type.split('.').slice(0,-1).forEach(t => exp = exp[t])
exp[_.last(test.type.split('.'))](test.expect)

我很樂意對此進行解釋。 是否存在另一種方法。

因為您正在破壞最后一個成員( equal )的thisValue ,它試圖訪問該成員但不再綁定到deep對象。

(我真的在解釋這個問題)。

你可以做:

let exp = expect(res.body);
test.type.split('.').forEach(t => {
    exp = typeof exp[t] === 'function'
        ? exp[t].bind(exp)
        : exp[t];
});
exp(test.expect)

為了進一步說明,這就是為什么您看到TypeError: this.assert is not a function - equal調用試圖訪問deep對象的this.assert ,但是this不再綁定到它。 通過.bind()顯式綁定它,我們可以保留它。

這就是為什么第二個代碼示例起作用的原因,因為您正在正確地將equal()調用為deep方法。

暫無
暫無

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

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