我一直在考虑在我的测试自动化项目中安装并要求jQuery的本地副本。我是jQuery的新手,到目前为止,我一直致力于正确设置jQuery。在npm jquery page中没有有效的示例,我还检查了类似的问题here和here。
我想使用jQuery的本地安装,这样其他签出我的项目的人就可以npm install
然后直接运行测试,即使他们没有全局安装jQuery。
所以,我已经在本地安装了它,但每次尝试使用它附带的ajax
库时,我都会得到:TypeError: $.ajax is not a function
这是我的代码:
function captureId(url, id) {
$.ajax({
beforeSend: function setHeaders(req) {
req.setRequestHeader('Authorization', 'Basic NotForYourEyes');
req.setRequestHeader('x-auth-token', session.token_auth); // jscs:ignore requireCamelCaseOrUpperCaseIdentifiers
},
url: url,
dataType: 'json',
data: {order: '-created_at'},
success: function updateLastCreated(response) {
if (response._data[0]._id) {
lastCreated[id] = response._data[0]._id;
console.log(lastCreated[id]);
} else {
console.log(JSON.stringify[response]);
}
}
});
}
我这样称呼它:
client.globals.captureId(client.globals.heisenbergUrl + 'ingredients', 'ingredientId');
现在,我认为对captureId函数的调用是有效的,因为它没有出错。它只在命中ajax方法时出错。注意,函数本身甚至可能包含错误!但我不确定,因为它还没有运行,因为
$.ajax
显然不是一个函数。哦,我也试过所有这些在我文件的顶部:
var $ = require('../node_modules/jQuery/dist/jquery.js');
var $ = require('jQuery');
var $ = require('jquery');
var $ = require('/node_modules/jquery'); // incorrect path but tried anyway
var $ = require('/node_modules/jQuery'); // same here
global.$ = require('jQuery');
global.$ = require('jquery');
额外信息:使用Nightwatch.js创建并运行所有测试。谢谢大家抽出时间。
最佳答案
@凯文B谢谢你的评论,它让我走上了正确的道路。尽管Nightwatch(可以)在您的计算机上以最佳方式创建一个独立服务器以在本地运行测试,但从技术上讲,这些测试仍在节点中运行。
我不这么想,所以我追了一会儿尾巴。
这是通过使用jsdom实现的,它允许您指定(如果您选择的话)jQuery的CDN托管版本,就像使用真正的web页面一样!杜普!
这是最终的工作函数。我最终卸载了本地版本的jQuery,转而使用Google。
// Ajax function to get the unique ID of the last created item and store it in our lastCreated object
function captureId(url, id) {
var jsdom = require('jsdom');
var html = '<html><body></body></html>';
jsdom.env({
html: html,
scripts: ['https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.js'],
done: function storeId(err, window) {
var $ = window.jQuery;
$.ajax({
async: true,
crossDomain: true,
url: url,
data: {order: '-created_at'},
beforeSend: function(request) {
request.setRequestHeader('content-type', 'application/json');
request.setRequestHeader('accept', 'application/json');
request.setRequestHeader('authorization', 'Basic NotForYourEyes');
request.setRequestHeader('x-auth-token', session.token_auth);
},
success: function(response) {
lastCreated[id] = response._data[0]._id;
console.log(lastCreated[id]);
},
error: function(response) {
console.log('Request failed with response: \n' + JSON.stringify(response));
}
});
}
});
}
关于javascript - 装有NPM的jQuery抛出$ .ajax不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811746/