在mocha.js中使用Empty函数

时间:2015-03-21 13:20:42

标签: javascript mocha

是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但我看到仍然失败

Google搜索    1)应该工作

0传球(2s)  1失败

1)Google搜索应该有效:     错误:超过2000毫秒的超时。确保在此测试中调用done()回调。      在null。 (C:\用户\卡什亚普\应用程序数据\漫游\ NPM \ node_modules \摩卡\ lib中\ runnable.js:170:19)      在Timer.listOnTimeout(timers.js:110:15)

你能不能请我建议一些链接知道并尝试使用selenium的mocha + nodejs

1 个答案:

答案 0 :(得分:11)

您的功能不是空的。实际上,在javascript中,有两种方法可以定义函数:

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

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

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

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

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

我们现在可以看到"做了什么"功能是。完成功能(您可以给它命名,完成只是最常见的名称)是您在测试结束时应该调用的功能。它是作为定义您所处理过程的函数的参数给出的。快速示例:

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设计了done参数,这使得测试在未调用参数函数时继续运行,因此,如果我希望我的测试正确运行,我必须这样做:

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

现在,mocha将停留在此测试中,而不会调用done函数。并且,一旦调用get函数的回调并进行断言,就会调用它。

现在,让我们看看代码。首先,您对完成的调用是不必要的(...)。完成不作为任何回调的参数给出,因此它应该是未定义的,并且,如果执行该行,则只会出现语法错误。

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

基本上,您应该开始测试在您的过程中逐个添加功能,以检查哪个功能超时,然后才能将问题减少到超时功能。

如果您想学习摩卡,该框架的官方网站非常好:http://mochajs.org/,并提供了一些好的做法(比如使用之前和之后)。

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