2016-07-16 12 views
2

Ich benutze eckige, Chai, angledmocks, Mokka, Karma. Der Testausgang dieser Fehler:Wie wird dieser Test in Mocha bestanden?

Type error

[email protected][native code]

app/main.coffee:30:23 <- app/main.js:23:23

test/main.spec.coffee:59:20 <- test/main.spec.js:18:27

assert = chai.assert 
expect = chai.expect 

describe("The Address Book App",() -> 
    describe("the proper filter",() -> 
    proper = null 
    beforeEach(() -> 
     module("AddressBook") 
     inject(($injector)-> 
     proper = $injector.get("$filter")("proper") 
    ) 
    ) 

    it("should proper case a string",() -> 
     expect(proper("ned stark")).to.equal("Ned Stark") 
    ) 
) 
) 

main.coffee

class AddressBook 
    constructor: -> 
    return [] 

class Proper 
    uppercase: (word) -> 
    word[0].toUpperCase().concat(word.slice(1)) 

    constructor:() -> 
    return (name) -> 
     words = name.toString().split(" ") 
     return words.map(@uppercase).join(" ") 


angular.module('AddressBook', new AddressBook()) 
.filter('proper', [Proper]) 

Aktualisiert

Ich denke, eine Klassenmethode 'Groß' ist besser geeignet für diesen Fall und mit einem kleine Änderung in "main.coffee" der Test bestanden.

class AddressBook 
    constructor: -> 
    return [] 

class Proper 
    @uppercase: (word) -> 
    word[0].toUpperCase().concat(word.slice(1)) 

    constructor:() -> 
    return (name) -> 
     words = name.toString().split(" ") 
     return words.map(Proper.uppercase).join(" ") 


angular.module('AddressBook', new AddressBook()) 
.filter('proper', [Proper]) 

Aber wenn ich wirklich brauchen und Instanz-Methode, wie der Test zu machen passieren?

Antwort

0

Es ist wegen der Art, wie CoffeeScript das Schlüsselwort this behandelt. In Ihrem Konstruktor geben Sie eine Funktion zurück, aber innerhalb dieser Funktion wird auf die Variable @uppercase zugegriffen. In diesem Fall soll das Schlüsselwort this (d. H. @) auf die zu erstellende Objektinstanz verweisen. this verweist jedoch immer auf das Objekt, auf dem die Funktion aufgerufen wird. In diesem Fall ist undefined.

es zu beheben, verwenden Sie einfach auf den Pfeil Fett und Coffee das this Schlüsselwort wie erwartet eingestellt:

class Proper 
    uppercase: (word) -> 
    word[0].toUpperCase().concat(word.slice(1)) 

    constructor:() -> 
    return (name) => 
     words = name.toString().split(" ") 
     return words.map(@uppercase).join(" ") 
+0

Das hat nicht funktioniert und Ausgang der gleiche Fehler – wilcus