Javascript 对jQuery ajax()使用量角器spyOn()会导致错误;ajax()方法不存在;

Javascript 对jQuery ajax()使用量角器spyOn()会导致错误;ajax()方法不存在;,javascript,jquery,jasmine,protractor,Javascript,Jquery,Jasmine,Protractor,我试图测试ajax是否用于表单提交。测试用量角器代码为: describe('login.php', function() { it("should use ajax on submit", function() { browser.get('/login.php'); spyOn($, "ajax"); $("form#frmLogin [type='submit']").click(); expect($.ajax).toHaveBeenCalled(); }); });

我试图测试ajax是否用于表单提交。测试用量角器代码为:

describe('login.php', function() {

it("should use ajax on submit", function() {
  browser.get('/login.php');
  spyOn($, "ajax");
  $("form#frmLogin [type='submit']").click();
  expect($.ajax).toHaveBeenCalled();
});
});
它将失败,并显示以下消息:

Error: ajax() method does not exist
怎么了

其他测试进展顺利。这是Windows PC。量角器配置:

exports.config = {
  allScriptsTimeout: 11000,

  specs: [
    'e2e/*.js',
  ],

  capabilities: {
    'browserName': 'chrome',
    'chromeOptions': {
        args: ['--test-type']
    }
  },

  chromeOnly: true,

  baseUrl: 'http://mysite.local/',

  framework: 'jasmine',

  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  }
};

我的环境有问题吗?

您不能监视jQuery,因为它是在浏览器中定义的,而不是在量角器测试中定义的。量角器测试是在浏览器外部运行的节点进程。它使用webdriver协议与浏览器通信


我建议您在karma中为此场景编写一个单元测试。

您能够访问
$
?spyOn()似乎无法访问window对象和ajax$。但是下一行使用$进行模拟时,单击运行良好。如果将
$
引用传递给
spyOn
,我看不出它如何无法访问
ajax
属性。您是否在多个测试中监视
$.ajax
?如果是这样,您是否恢复
$.ajax
方法?不,这只是测试,因此不需要恢复
$.ajax
方法。无论如何,最好恢复spy,您可能会忘记在其他地方测试
$.ajax
之前执行此操作。什么是
console.log($.ajax)输出?所以我根本无法在量角器上测试ajax?您可以断言当前url在登录后已更改。您还可以测试是否存在注销链接。用户登录后会看到什么?这将是一个很好的测试方法。