我有一个方法我在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';
我感谢任何建议。
答案 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 testShowInfo
和const 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);
})
};
});