如何使用spyOn模拟Jasmine中选择器的jQuery值?

时间:2016-08-23 20:50:34

标签: javascript jquery unit-testing jasmine karma-jasmine

我正在使用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);
     });
});

});

任何人都看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的问题是,每次拨打$("#username")时,您都会得到一个不同的对象。因此,函数中的$("#username")将不会被监视。

你应该窥探$.fn,这将由所有jQuery对象共享。

spyOn($.fn, 'val').and.returnValue('test@test.com')