Karma + Jasmine + JSONFixtures:无法读取未定义的 属性 'ajax'
Karma + Jasmine + JSONFixtures: Cannot read property 'ajax' of undefined
背景:
我正在尝试为我的 javascript jsonTransformer 编写单元测试,它将 JSON-Schema 转换为项目特定的 JSON。
作为第一个测试,我想对这个转换器进行黑盒测试,它接收输入-JSON并将转换后的JSON与正确的JSON进行比较。
我正在使用 Karma 和 Jasmine 作为测试环境。
问题:
如何解决以下错误?
TypeError: Cannot read property 'ajax' of undefined
at jasmine.JSONFixtures.loadFixtureIntoCache_ (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:257:6)
at jasmine.JSONFixtures.getFixtureData_ (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:249:41)
at jasmine.JSONFixtures.read (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:238:12)
at jasmine.JSONFixtures.proxyCallTo_ (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:272:29)
at window.getJSONFixture (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:836:38)
at Object.<anonymous> (...test/test.js:24:8)
at Object.e [as invoke] (.../node_modules/angular/angular.min.js:39:394)
at Object.workFn (.../node_modules/angular-mocks/angular-mocks.js:2439:20)
结构:
所有依赖项都在“./node-modules/”中。
karma.config 在 "./node-modules/karma/".
index.html 在“./app/”中。
JS 文件位于“./app/js/”。
test.js 在“./test/”中。
JSON 模拟在“./test/mock/”.
代码:
karma.config:
basePath: '../..',
frameworks: ['jasmine'],
files: [
'node_modules/jasmine-jquery/lib/jasmine-jquery.js',
'node_modules/angular/angular.min.js',
'node_modules/angular-mocks/angular-mocks.js',
'app/js/formulargenerator.js',
'app/js/*.js',
'test/*.js',
// fixtures
{pattern: 'test/mock/*.json', watched: true, served: true, included: false}
],
test.js:
describe('jsonTransformer', function() {
var $httpBackend, scope;
beforeEach(inject(function ($injector, $rootScope, $controller) {
jasmine.getJSONFixtures().fixturesPath='base/test/mock';
dump(jasmine.getJSONFixtures());
dump(getJSONFixture('mock_formularSpecification.json'));
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET('http://localhost:8080/myProject/rest/form/1').respond(
getJSONFixture('mock_input.json')
);
scope = $rootScope.$new();
$controller('jsonTransformer', {'$scope': scope});
dump($controller);
}));
var transformedJSON = getJSONFixture('mock_output.json'); //todo: transform
it('should have transformed the input-JSON to the correct output-JSON', function() {
$httpBackend.flush();
expect(transformedJSON).toBe(getJSONFixture('mock_angularFormly.json'));
});
});
感谢 Chanthu 指出我缺少的依赖项:jquery
我通过 npm 安装了 jquery 但我忘记将它列在 karma.conf 文件中:'node_modules/jquery/dist/jquery.min.js',
背景:
我正在尝试为我的 javascript jsonTransformer 编写单元测试,它将 JSON-Schema 转换为项目特定的 JSON。
作为第一个测试,我想对这个转换器进行黑盒测试,它接收输入-JSON并将转换后的JSON与正确的JSON进行比较。
我正在使用 Karma 和 Jasmine 作为测试环境。
问题:
如何解决以下错误?
TypeError: Cannot read property 'ajax' of undefined
at jasmine.JSONFixtures.loadFixtureIntoCache_ (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:257:6)
at jasmine.JSONFixtures.getFixtureData_ (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:249:41)
at jasmine.JSONFixtures.read (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:238:12)
at jasmine.JSONFixtures.proxyCallTo_ (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:272:29)
at window.getJSONFixture (.../node_modules/jasmine-jquery/lib/jasmine-jquery.js:836:38)
at Object.<anonymous> (...test/test.js:24:8)
at Object.e [as invoke] (.../node_modules/angular/angular.min.js:39:394)
at Object.workFn (.../node_modules/angular-mocks/angular-mocks.js:2439:20)
结构:
所有依赖项都在“./node-modules/”中。
karma.config 在 "./node-modules/karma/".
index.html 在“./app/”中。
JS 文件位于“./app/js/”。
test.js 在“./test/”中。
JSON 模拟在“./test/mock/”.
代码:
karma.config:
basePath: '../..',
frameworks: ['jasmine'],
files: [
'node_modules/jasmine-jquery/lib/jasmine-jquery.js',
'node_modules/angular/angular.min.js',
'node_modules/angular-mocks/angular-mocks.js',
'app/js/formulargenerator.js',
'app/js/*.js',
'test/*.js',
// fixtures
{pattern: 'test/mock/*.json', watched: true, served: true, included: false}
],
test.js:
describe('jsonTransformer', function() {
var $httpBackend, scope;
beforeEach(inject(function ($injector, $rootScope, $controller) {
jasmine.getJSONFixtures().fixturesPath='base/test/mock';
dump(jasmine.getJSONFixtures());
dump(getJSONFixture('mock_formularSpecification.json'));
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET('http://localhost:8080/myProject/rest/form/1').respond(
getJSONFixture('mock_input.json')
);
scope = $rootScope.$new();
$controller('jsonTransformer', {'$scope': scope});
dump($controller);
}));
var transformedJSON = getJSONFixture('mock_output.json'); //todo: transform
it('should have transformed the input-JSON to the correct output-JSON', function() {
$httpBackend.flush();
expect(transformedJSON).toBe(getJSONFixture('mock_angularFormly.json'));
});
});
感谢 Chanthu 指出我缺少的依赖项:jquery
我通过 npm 安装了 jquery 但我忘记将它列在 karma.conf 文件中:'node_modules/jquery/dist/jquery.min.js',