Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jasmine-Karma对javascript进行单元测试:如何模拟函数内部使用的变量_Javascript_Jquery_Unit Testing_Karma Runner_Karma Jasmine - Fatal编程技术网

使用Jasmine-Karma对javascript进行单元测试:如何模拟函数内部使用的变量

使用Jasmine-Karma对javascript进行单元测试:如何模拟函数内部使用的变量,javascript,jquery,unit-testing,karma-runner,karma-jasmine,Javascript,Jquery,Unit Testing,Karma Runner,Karma Jasmine,需要测试的功能: function validate() { var isOk = false; var radios = $('input[name="abc"]:checked', '#parentDiv'). val() ; If(radios === "ok" ) isOk = true; return isOk; } describe("validate ok check", function() { it("valida

需要测试的功能:

function validate() { 
   var isOk   = false; 
   var radios = $('input[name="abc"]:checked', '#parentDiv'). val() ;

   If(radios === "ok" )    
      isOk = true;

    return isOk; 
}
describe("validate ok check",  function() {
it("validate returns true", function () {
expect(validate()).tobe(true);
}) ;
}) ;
我想为上述代码编写测试用例。我用茉莉花的业力来实现这一点。我有一个疑问 如何模拟从jquery选择器获取值的radios变量并为其分配模拟值,以便测试用例可以继续测试剩余函数的其余部分

测试用例:

function validate() { 
   var isOk   = false; 
   var radios = $('input[name="abc"]:checked', '#parentDiv'). val() ;

   If(radios === "ok" )    
      isOk = true;

    return isOk; 
}
describe("validate ok check",  function() {
it("validate returns true", function () {
expect(validate()).tobe(true);
}) ;
}) ;

当前在运行测试用例时,radios变量被分配了未定义的值,但是我想模拟它,以获得分配给它的“ok”值,从而成功地通过测试用例

在Karma上下文中,您应该测试JS-only功能。您的代码包含依赖于现有DOM(浏览器)的JQuery,因此它不太适合此类测试

在这种情况下,您可以模拟JQuery本身。由于您将其用作全局变量,因此只需在测试用例中覆盖它即可:

$ = function(selector) {
  if (selector) === 'input[name="abc"]:checked', '#parentDiv' {
    return { 
      val: function() { return 'ok'; }
    };
  }
};

describe("validate ok check",  function() {
  it("validate returns true", function () {
    expect(validate()).tobe(true);
  }) ;
}) ;

注意:这是一种非常直接的方法-您可以使用jasmine的mock来提高可靠性(例如,还可以注册您希望从jquery调用的内容以及调用次数等)。

'input[name=“abc”]:checked',
我想你不需要在这里留空格。你有什么问题吗?@jai你为什么要删除你的评论?你对我上面的问题给出了一个非上下文的答案,然后删除了你的答案和我的评论,即使是我为了更好地理解而详细阐述了这个问题。请让其他人回答,或者请让我知道你需要什么细节,哪些部分不清楚?看看我看到了什么,我问了什么。因为我贴出的答案没有回答你的问题,所以我删除了它,这很好。现在回到你的岗位。但是问题还是不清楚,而且很不清楚你对SO有什么要求?洁:你能告诉我哪一部分不清楚吗。?我的问题是如何在测试用例中模拟变量。我告诉了周围的很多人,他们理解这个问题。请让我知道哪个部分不清楚?我会尽量详细说明。谢谢