获得404关于使用karma和jasmine对json文件进行ajax调用的自定义实现
Getting 404 on custom implementation of ajax call for json file with karma and jasmine
我对因果报应和茉莉花相对陌生。我喜欢它的语法,但现在我在编写自定义ajax函数时遇到了问题:
function ajax(options, callback) {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
if (xmlhttp.status == 200) {
callback(xmlhttp);
} else if (xmlhttp.status == 404) {
callback(null, xmlhttp);
} else {
callback(null, xmlhttp);
}
}
};
xmlhttp.open(options.method, options.url, true);
xmlhttp.send(options.data);
}
所以在我的测试文件中:
describe('ajax', function() {
describe('$.ajax', function() {
it('should be able to get data', function(done) {
$.ajax({
url: 'test.json',
method: 'GET'
}, function(data, err) {
expect(data).toBeDefined();
console.log(data);
console.log(err);
done();
});
});
});
});
它返回一个带有404错误的xhr对象。仔细一看,PhantomJS说:[web-server]: 404: /test.json
。在搜索了几个答案后,我尝试了代理,结果仍然是404。
顺便说一句,这不使用jquery。它是一个自定义实现,设置在编写的$模块上。所有的src代码都是用vanillaJS编写的。
那么,我如何让ajax函数能够访问json文件呢。我在根目录下的文件结构是:
/
--src
--js
--tests
--karma.conf.js
我已经将test.json文件放在src和test目录中。
最后我的karma.conf.js:
// karma.conf.js
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
reporters: ['spec'],
browsers: ['PhantomJS'],
files: [
'src/js/**/*.js',
'tests/*.js'
]
});
};
如果你发现它相关,这将由Gulp处理。
好的,我想明白了。这非常令人困惑,而且没有太多关于它的信息。要访问项目中的json文件,您需要使用karma.conf.js文件。在我的情况下,我不得不改变这个:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
reporters: ['spec'],
browsers: ['PhantomJS'],
files: [
'src/js/**/*.js',
'tests/*.js'
]
});
};
到此:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
reporters: ['spec'],
browsers: ['PhantomJS'],
files: [
'src/js/**/*.js',
'tests/*.js', {
pattern: 'tests/*.json',
served: true,
included: false
}
],
proxies: {
'/tests/': '/base/tests/'
}
});
};
模式部分是在不抛出可怕错误的情况下获取json文件的部分。显然这些被称为固定装置?
请注意代理部分。我会尽量解释清楚的。基本上,Karma服务于从链接到目录根目录的基本目录的所有内容。现在,当我说base时,我不是指root或/,its/base/。这就是我感到困惑的地方。
因此,如果您有一个目录要为{pattern: 'spec/fixtures/*.json'}
提供服务,那么您将需要一个类似于proxies: { '/spec/fixtures/': '/base/spec/fixtures/' }
的代理,然后您在测试中的ajax调用将转到url spec/fixtures/test.json
。
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Javascript/jQuery中的并行Ajax调用
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- node.js请求数据事件未在CORS ajax调用中触发
- 如何从ajax调用返回.wrap()元素
- Ajax调用在Firefox中不会自动响应
- AJAX调用中的非法调用
- 使用AJAX调用将GeoJSON数据拉入传单
- 在MVC 4中,对Controller的Ajax调用为空
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 在ajax调用中阻止来自JS对象的函数
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 页面加载后的Ajax调用
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- curl和fileget_contents在ajax调用后不起作用
- 在任何AJAX调用之前触发一个javascript函数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作