【问题标题】:Using Empty function in mocha.js在 mocha.js 中使用 Empty 函数
【发布时间】:2015-05-24 20:18:02
【问题描述】:

我是 Javascript、node.js 和 mocha 的新手。当我在寻找基本示例时,我遇到了一个空函数“function()”。使用空函数的目的是什么。

var assert = require('assert'),
var test = require('selenium-webdriver/testing'),
var webdriver = require('selenium-webdriver');

test.describe('Google Search', function() {
  test.it('should work', function() {
    var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

    driver.get('http://www.google.com');
    var searchBox = driver.findElement(webdriver.By.name('q'));
    searchBox.sendKeys('simple programmer');
    searchBox.getAttribute('value').then(function(value) {
      assert.equal(value, 'simple programmer');
    });
    driver.quit();
    done();
  });
});

当我运行此示例代码时,出现以下错误,请您帮我解决这个问题。

错误: 错误:超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调。

我看到能够启动浏览器并按照程序中的说明打开 google.com,但我看到仍然失败

谷歌搜索 1)应该工作

0 次通过 (2s) 1 次失败

1) 谷歌搜索应该可以工作: 错误:超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调。 在空。 (C:\Users\kashyap\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:170:19) 在 Timer.listOnTimeout (timers.js:110:15)

能否请您也建议我一些链接以了解并尝试使用 selenium 的 mocha+nodejs

【问题讨论】:

  • 您绝对应该接受所提供的答案。

标签: javascript mocha.js


【解决方案1】:

您的函数不为空。事实上,在 javascript 中,有两种方式来定义一个函数:

function myFunction (arg1, arg2){
    //Do some stuff
}

var myFunction = function(arg1, arg2){
    //Do some stuff
}

在这两种情况下,函数都存储在名为“我的函数”的变量中(尽管范围不同)。

所以基本上,在 javascript 中,函数就是一个值。您可以在 c 中与函数指针进行类比,以了解它的工作方式。

现在,mocha 所做的是将测试过程作为函数描述的参数,并将测试本身作为函数的参数(您也可以使用 before/afer 函数设置初始化/清理过程)。

我们现在可以看到“完成”功能是什么。 done 函数(你可以给它起你想要的名字,done 只是最常见的名字)是你在测试结束时应该调用的函数。它作为函数的参数给出,用于定义您所处的过程。快速示例:

it('should work', function(done){
    //do some testing
    done();
});

做同样的事情:

it('should work', function(){
    //do some testing
});

但是,当您测试异步函数时,该参数很有用。例如,我想在数据库中测试一个查询,这不是即时的。

it("should work", function(){
    dbDriver.get('key1', function(data){
        assert(data == goodValue);
    });
});

前面的例子不能正常工作,因为db请求不是即时的,是一个异步调用,这意味着我的测试将继续运行,我的断言将在我们离开测试部分后发生。所以 mocha 会认为一切正常,然后会忽略我的断言。

为了允许异步函数测试,mocha 设计了 ​​done 参数,它使测试在不调用参数函数的情况下继续运行,所以,如果我想让我的测试正确运行,我必须这样做:

it("should work", function(done){
    dbDriver.get('key1', function(data){
        assert(data == goodValue);
        done();
    });
});

现在,在没有调用 done 函数的情况下,mocha 将卡在这个测试中。并且,一旦调用get函数的回调并进行断言,它就会被调用。

现在,让我们看一下代码。首先,您对 done 的调用是未调用的 (...) 。 Done 没有作为任何回调的参数给出,因此它应该是未定义的,并且如果执行了该行,您只会得到一个语法错误。

现在,基本上,您的代码中发生的情况是函数响应不够快,因此 mocha 认为测试已超时(默认值为 2000 毫秒)。

基本上,您应该开始测试在您的流程中逐一添加函数以检查哪个超时,然后能够将您的问题减少到仅超时函数。

如果你想学习mocha,框架的官网还是不错的:http://mochajs.org/,并提供了一些很好的实践(比如使用前后)。

我希望我不会太长,我可以帮助你更好地理解 mocha 和 javascript。

【讨论】:

  • 非常感谢克莱门特
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多