2016-05-10 12 views
8

mam na myśli biblioteki testowanie twierdzenie: http://chaijs.com/api/bdd/#falseW jaki sposób Chai JS czynią nawiasy funkcyjne opcjonalnymi?

Możesz napisać twierdzeń łańcuchowe język tak:

expect(false).to.be.false; 

spodziewać() jest oczywiście funkcję globalnego „to.be” wygląda dwie właściwości, ale jak działa ostatnia część "fałsz". Spodziewam się, że będzie to wywołanie funkcji:

expect(false).to.be.false(); 

Czy to jest składnia ES 2015? I nie wydaje się znaleźć odniesienie do niej w https://github.com/lukehoban/es6features

przepełnienie stosu mówi jej nie możliwe: How to implement optional parentheses during function call? (function overloading)

Czy ktoś może rzucić nieco światła na to, jak coś takiego jest realizowany?

Kod źródłowy: https://github.com/chaijs/chai/blob/master/lib/chai/core/assertions.js#L281

+2

Dowiedz się więcej o 'Object.defineProperty' – SLaks

Odpowiedz

11

Można to zrobić (i wiele innych rzeczy) z Object.defineProperty. Oto prosty przykład:

// our "constructor" takes some value we want to test 
var Test = function (value) { 
    // create our object 
    var testObj = {}; 

    // give it a property called "false" 
    Object.defineProperty(testObj, 'false', { 
     // the "get" function decides what is returned 
     // when the `false` property is retrieved 
     get: function() { 
      return !value; 
     } 
    }); 
    // return our object 
    return testObj; 
}; 

var f1 = Test(false); 
console.log(f1.false); // true 
var f2 = Test("other"); 
console.log(f2.false); // false 

Dużo więcej można zrobić z Object.defineProperty. Aby uzyskać szczegółowe informacje, powinieneś zapoznać się z the MDN docs for Object.defineProperty.

Powiązane problemy