首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mocha.js中使用Empty函数

在mocha.js中使用Empty函数
EN

Stack Overflow用户
提问于 2015-03-21 21:20:42
回答 1查看 5.3K关注 0票数 1

我对Javascript,node.js和mocha都是新手。在查看基本示例时,我遇到了一个空函数" function ()“。使用empty函数的目的是什么?

代码语言:javascript
复制
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();
  });
});

当我运行这个示例代码时,我得到了下面的错误,你能帮我解决这个问题吗?

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

正如我所看到的,我能够启动浏览器并按照在程序中写入的方式打开google.com,但是我仍然看到失败

谷歌搜索1)应该可以工作

0传递(2s) 1失败

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

您还可以向我推荐一些了解和尝试使用selenium的mocha+nodejs的链接吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 09:13:31

您的函数不为空。事实上,在javascript中,有两种方法可以定义函数:

代码语言:javascript
复制
function myFunction (arg1, arg2){
    //Do some stuff
}

代码语言:javascript
复制
var myFunction = function(arg1, arg2){
    //Do some stuff
}

在这两种情况下,函数都存储在名为"my function“的变量中(不同的作用域)。

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

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

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

代码语言:javascript
复制
it('should work', function(done){
    //do some testing
    done();
});

执行与以下相同的操作:

代码语言:javascript
复制
it('should work', function(){
    //do some testing
});

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

代码语言:javascript
复制
it("should work", function(){
    dbDriver.get('key1', function(data){
        assert(data == goodValue);
    });
});

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

为了允许异步函数测试,mocha设计了done参数,这使得测试在参数function没有被调用时继续运行,所以,如果我想让我的测试正确运行,我必须这样做:

代码语言:javascript
复制
it("should work", function(done){
    dbDriver.get('key1', function(data){
        assert(data == goodValue);
        done();
    });
});

现在,mocha将在此测试中被卡住,而done函数未被调用。而且,一旦get函数的回调被调用并做出断言,它就会被调用。

现在,让我们看一下代码。首先,您对done的调用是未调用的(...)为。Done不是作为任何回调函数的参数给出的,所以它应该是未定义的,如果这一行被执行,你只会得到一个语法错误。

现在,基本上,在你的代码中发生的事情是一个函数响应不够快,所以mocha认为测试已经超时(默认值是2000ms)。

基本上,你应该开始在你的过程中一个接一个地测试添加函数,以检查哪个函数超时了,然后能够将问题减少到只有超时函数。

如果你想学习mocha,这个框架的官方网站是非常好的:http://mochajs.org/,并提供了一些很好的实践(比如使用之前和之后)。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29183191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档