Javascript 对jQuery ajax()使用量角器spyOn()会导致错误;ajax()方法不存在;
我试图测试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(); }); });
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在登录后已更改。您还可以测试是否存在注销链接。用户登录后会看到什么?这将是一个很好的测试方法。