【发布时间】:2016-12-30 19:54:42
【问题描述】:
我正在使用 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);
});
});
});
有人看到我做错了什么吗?
【问题讨论】:
-
这实际上不是另一个问题的完整副本,因为这个问题包括被测代码 (CUT),即
isValidEmail函数,而另一个问题没有。这很重要,因为更正确和优雅的解决方案实际上不适用于此 CUT,而这与其他问题无关。有关更多详细信息,请参阅接受的答案下方的我的 cmets。
标签: javascript jquery unit-testing jasmine karma-jasmine