Автоматизированное тестирование с Chai JS - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу загрузить файл конфигурации для тестов.

Одним из параметров является тип.

Так, как я могу заменить следующую строку.

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)

Я хотел бы получить объяснение этого.и если есть другой способ для этого.

1 Ответ

0 голосов
/ 25 декабря 2018

Поскольку вы нарушаете thisValue последнего члена (equal), к которому он пытается получить доступ, но больше не привязан к deep объекту.

(IЯ действительно пытаюсь объяснить это.)

Вы можете сделать:

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 вызов пытаетсяполучить доступ к this.assert объекта deep, но this больше не привязан к нему.Явно связывая его через .bind(), мы можем сохранить его.

Вот почему ваш второй пример кода работает, потому что вы правильно вызываете equal() как метод deep.

...