javascript - 装有NPM的jQuery抛出$ .ajax不是函数

标签 javascript jquery ajax npm nightwatch.js

我一直在考虑在我的测试自动化项目中安装并要求jQuery的本地副本。我是jQuery的新手,到目前为止,我一直致力于正确设置jQuery。在npm jquery page中没有有效的示例,我还检查了类似的问题herehere
我想使用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/

相关文章:

javascript - 模块化 AngularJS 应用程序后,如何将整个项目包含在 index.html 中,而无需键入大量 &lt;script&gt; 标签

javascript - 打印时触发调整大小事件

jquery - 按钮中的微调器

javascript - 有没有办法异步调用外部API而不减慢整个网站的速度?

javascript - 在 HTML 数据表上使用子元素数组

javascript - 如果分配给不存在的 vue 数据属性,如何显示某种错误或警告?

javascript - 如何使用nodejs获取父文件夹名称

javascript - 浏览器如何知道 e(或 goldfish)指的是事件对象?

javascript - 如何加载内容(包括内容的图像)然后淡入淡出?

javascript - 使用 Ajax 从不同输入上传多个文件