Я пытаюсь выполнить тест Jasmine (используя Karma и IntelliJ 13) для проверки файлов JSON. В идеале, мой тест просто загрузил бы файл JSON в объект данных, а затем позвольте мне разобрать, чтобы проверить правильность форматирования и данных. Мне не нужно проверять функции до или после, а также не нужно тестировать сервер.
Моя основная настройка такова:
it("should load an external file", function(){
var asyncCallComplete, result,
_this = this;
// asyncCallComplete is set to true when the ajax call is complete
asyncCallComplete = false;
// result stores the result of the successful ajax call
result = null;
// SECTION 1 - call asynchronous function
runs(function() {
return $.ajax('/test/config.json', {
type: 'GET',
success: function(data) {
asyncCallComplete = true;
result = data;
},
error: function() {
asyncCallComplete = true;
}
});
});
// SECTION 2 - wait for the asynchronous call to complete
waitsFor(function() {
return asyncCallComplete !== false;
}, "async to complete");
// SECTION 3 - perform tests
return runs(function() {
return expect(result).not.toBeNull();
});
}
Проблема в том, что независимо от того, какой путь я использую, я получаю ошибку 404, и файл не загружается. Я попытался загрузить внешний результат JSON с удаленного сервера с помощью этой тестовой службы:
И это работает.
Мой тестовый файл имеет имя /test/mySpec.js, а мой файл karma.conf.js находится в корне. Я перемещал файл JSON во все эти места без везения. Что я делаю неправильно?
ОБНОВЛЕНИЕ С ОТВЕТОМ:
В ответ ниже я добавил это в свой файл karma.conf.js:
// fixtures
{ pattern: 'test/*.json',
watched: true,
served: true,
included: false
}
Затем я написал свой тест следующим образом:
var json:any;
it("should load a fixture", function () {
jasmine.getFixtures().fixturesPath = "base/test/"
var f = readFixtures("registration.json");
json = JSON.parse(f);
expect(json).toBeDefined();
})
it("should have a title", function () {
expect(json.title).toNotBe(null);
})
etc...
И он проходит.