2016-07-16 20 views
2

私は角度、チャイ、角マックス、モカ、カルマを使用しています。テスト出力このエラー:このテストをモカで行うには?

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]) 

テストパスの '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(Proper.uppercase).join(" ") 


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

しかし、私は本当に必要とインスタンスメソッドは、どのようにテストを合格にしますか?

答えて

0

CoffeeScriptがthisキーワードを処理する方法のためです。あなたのコンストラクタでは、関数を返していますが、その関数の中で変数@uppercaseにアクセスします。この場合、thisキーワード(つまり、@)が、作成中のオブジェクトインスタンスを参照するようにします。ただし、thisは、関数が呼び出されたオブジェクトを常に参照します。この場合はundefinedです。

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

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

これは、同じエラーが動作し、出力しませんでした:単に脂肪の矢印を使用して、それを修正するには、期待通りのCoffeeScriptはthisキーワードを設定します

wilcus

関連する問題