我正在使用AngularJS / Karma / Jasmine编写一些单元测试,并且无法获得Jasmine的“spyOn”#。工作方法。在我使用spyOn
后,我仍然会为该选择器获得undefined
。
我遇到的问题是在我运行
之后spyOn($("#username"), "val").and.returnValue("test@test.com");
我试着像这样得到用户名的价值:
$("#username").val();
,它是undefined
。
function isValidEmail() {
var email = $("#username").val();
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return email.match(regex);
}
'use strict';
describe('test/spec/controllers/validation.js - No controller', function () {
describe('email validation', function () {
it('should be true for valid emails', function() {
spyOn($("#username"), "val").and.returnValue("test@test.com");
var result = isValidEmail();
expect(result).toEqual(true);
});
});
});
任何人都看到我做错了什么?
答案 0 :(得分:0)
您的问题是,每次拨打$("#username")
时,您都会得到一个不同的对象。因此,函数中的$("#username")
将不会被监视。
你应该窥探$.fn
,这将由所有jQuery对象共享。
spyOn($.fn, 'val').and.returnValue('test@test.com')