Jasmine测试认为数据没有被正确解析

时间:2016-03-21 17:24:15

标签: javascript json parsing jasmine

我有一个方法我在Jasmine中进行测试,其部分功能是它解析我提供给它的JSON对象。如果我记录"数据"对象在浏览器控制台中,看起来JSON被解析得很好,但是当我运行测试时,我得到 SyntaxError:Unexpected token 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';

我感谢任何建议。

2 个答案:

答案 0 :(得分:0)

事实证明,这里的问题是我没有将参数传递给断言中的函数调用。我错误地认为我只需要在beforeEach函数中执行此操作。

我收到了 SyntaxError:Unexpected token u ,因为JSON.parse()的值是未定义的。

断言应如下所示:

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

答案 1 :(得分:0)

如果saveShow是我们的控制器,那么我希望您在使用时正确注入它 saveShowToDashboard方法。

现在而不是像const testShowInfoconst test_csrf

那样定义

你应该在你的控制器中将它定义为这个

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

使用const or var定义它只会使控制器可以看到它 不能以茉莉花的形式注射。

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);
                    })
                };
            });