2016-03-21 12 views
1

私はジャスミンでテストしているメソッドを持っていますが、その機能の一部は、それが私がフィードしているJSONオブジェクトを解析することです。ブラウザのコンソールに "data"オブジェクトを記録すると、JSONが正しく解析されたように見えますが、テストを実行するとが返されます。SyntaxError:予期しないトークンu。ジャスミンテストはデータが正しく解析されていないと思っています

これはテスト(私はトラブルシューティングをしながら、私は、任意の数を返すと期待してい)です:

describe('The Save Show Form', function() { 

    beforeEach(function() { 

    saveShow = { 
     saveShowToDashboard: function(info, csrf) { 
     const showInfo = info; 
     const parsedShowInfo = JSON.parse(showInfo); 
     const _csrf = csrf; 
     const data = { 
      tourInfo: parsedShowInfo, 
      token: _csrf 
     }; 
     console.log(data); 
     return 2; 
     } 
    }; 

    spyOn(saveShow, 'saveShowToDashboard').and.callThrough(); 

    saveShow.saveShowToDashboard(testShowInfo, test_csrf); 

    }); 

    it('Should return a value of 2 for this test.', function() { 
    expect(saveShow.saveShowToDashboard()).toEqual(2); 
    }); 
}); 

...そしてこれは私がそれを渡しているダミーデータである:

const testShowInfo = '{"id": "11655593", "artist": "Odesza", "date": "Thursday, March 24, 2016 at 10:00PM", "venue": "Pacific Coliseum", "location": "Vancouver, Canada", "tickets": "available"}'; 

const test_csrf = 'KGSa3p5f-eJDLDjksk6FQmRqx2aouBU9zY-w'; 

私は何かアドバイスをいただきありがとうございます。

+0

このコードは、githubの上の部分的な機能をアップロードenough.canされていませんか? –

+0

本当に奇妙です。 'JSON.parse(testShowInfo)'を直接呼び出しても問題ありません。 'info'が何らかの形で破損していないかどうかを確認するために、saveShowToDashboard()にログを追加しようとしましたか? –

+0

@Haroldo_OKええとすべてがうまくいきます。このテストの関数は、アプリケーションで使用しているレプリカです。機能は、アプリケーションで完全に動作します。 –

答えて

0

ここでの問題は、アサーション内の関数呼び出しに引数を渡していないことでした。私は間違って、beforeEach関数の中でそうする必要があると誤って仮定しました。

私はを取得していました。SyntaxError:予期しないトークンuは、JSON.parse()に値undefinedが渡されていたためです。

次のように主張は次のようになります。

it('Should return a value of 2 for this test.', function() { 
    expect(saveShow.saveShowToDashboard(testShowInfo, test_csrf)).toEqual(2); 
    }); 
0

saveShowが私たちのコントローラであれば、私はあなたがそれを saveShowToDashboard方法です使用しているとして、あなたはそれを正しく注入された期待しています。

の代わりに、このconst testShowInfoconst test_csrf

のように定義しますが、それは目に見えるだけで、コントローラをwithingと することはできません作るconst or varでそれを定義したようにコントローラ

$scope.testShowInfo = '..'; 
$scope.test_csrf ='..'; 

にこの1のように、それを定義する必要がありますジャスミンスクリプトで注射可能。

JS:

var controller,saveShow; 
beforeEach(inject(function(_$controller_,$rootScope){ 
    controller= controller_; 
    var scope = $rootScope.$new();; 
    saveShow = controller("saveShow",{$scope : scope}); 
})); 





describe('The Save Show Form', function() { 

      beforeEach(function() { 

        it("json should be defined", function() { 

         const showInfo = save.Showinfo; 
         const test_csrf = save.test_csrf; 

         const parsedShowInfo = JSON.parse(saveShow.showInfo); 

         saveShow.saveShowToDashboard(testShowInfo, test_csrf); 
        }) 
       }; 
      }); 
関連する問題