2016-06-14 4 views
2

Наш Мокко набор тестов имеет следующую строку:Node.js «должно» утверждение библиотеки, как она работает?

model.getResourceDependencies.should.be.a.Function; 

тестовый код использует should библиотеки

, как вы можете видеть, что приведенное выше выражение не является ни назначение, ни вызова, или это?

Как это работает? Есть ли какой-то базовый механизм onPropertyRead() или что-то в этом роде, чтобы библиотека if могла выполнить что-то, даже если никакая функция явно не вызвана?

Кстати, почти невозможно запомнить какие-либо из API или chai API.

+0

ES5 [газопоглотитель] (https://developer.mozilla.org/en/docs/Web/JavaScript/Справочные материалы/Функции/получить)? – user3707125

+1

Просто FYI should.js отдельные геттеры и утверждения, в вашем случае .Function() в последних версиях будет вызовом функции утверждения. Это помогает с линтами по существу и не имеет ложного позитива, когда вы используете неправильное имя getter, например .string, но на самом деле это должно быть .String, например. –

+0

Связано: [Как работает функция ожидания chai?] (Https://stackoverflow.com/q/31605391/1048572) – Bergi

ответ

4

should.js использует ES5 геттер. https://github.com/shouldjs/should.js/blob/9.0.2/lib/should.js#L105

chai также использует его. https://github.com/chaijs/chai/blob/3.5.0/lib/chai/interface/should.js#L35

В общем, такое поведение доступен с ES5 getter или ES6 ProxyObject.prototype.__noSuchMethod__ в прежние времена)

+0

Механизм ключа представляет собой конструкцию JavaScript, ['Object.defineProperty()'] (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) –