kes*_*yap 1 javascript mocha.js
我是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();
});
});
Run Code Online (Sandbox Code Playgroud)
当我运行此示例代码时,我得到以下错误,请你帮我解决这个问题.
错误:错误:超出2000ms的超时.确保在此测试中调用done()回调.
谷歌搜索1)应该工作
0传球(2s)1失败
1)谷歌搜索应该工作:错误:超过2000毫秒的超时.确保在此测试中调用done()回调.在null.(C:\ Users\kashyap\AppData\Roaming \npm \node_modules\mocha\lib\runnable.js:170:19)在Timer.listOnTimeout(timers.js:110:15)
你能不能请一些知道的链接,并尝试使用selenium的mocha + nodejs
Clé*_*hou 11
你的功能不是空的.事实上,在javascript中,有两种方法可以定义一个函数:
function myFunction (arg1, arg2){
//Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
要么
var myFunction = function(arg1, arg2){
//Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,函数都存储在名为"my function"的变量中(尽管具有不同的范围).
所以基本上,在javascript中,函数是一个值.你可以在c中绘制与函数指针并行的,以了解它的工作方式.
现在,mocha所做的是将测试过程作为函数describe的参数,并将测试本身作为函数的参数(您可以使用before/afer函数设置初始化/清理过程).
我们现在可以看到"完成"功能是什么.完成功能(您可以给它命名,完成只是最常见的名称)是您在测试结束时应该调用的功能.它是作为定义您所处过程的函数的参数给出的.快速示例:
it('should work', function(done){
//do some testing
done();
});
Run Code Online (Sandbox Code Playgroud)
做同样的事情:
it('should work', function(){
//do some testing
});
Run Code Online (Sandbox Code Playgroud)
但是,当您测试异步函数时,该参数非常有用.例如,我想在数据库中测试查询,这不是即时的.
it("should work", function(){
dbDriver.get('key1', function(data){
assert(data == goodValue);
});
});
Run Code Online (Sandbox Code Playgroud)
前面的示例将无法正常工作,因为db请求不是即时的并且是异步调用,这意味着我的测试将继续运行,并且我的断言将在我们离开测试部分后发生.所以摩卡会认为一切都很好,然后会忽略我的断言.
为了允许异步函数测试,mocha设计了done参数,这使得测试在未调用参数函数时继续运行,因此,如果我希望我的测试正确运行,我必须这样做:
it("should work", function(done){
dbDriver.get('key1', function(data){
assert(data == goodValue);
done();
});
});
Run Code Online (Sandbox Code Playgroud)
现在,mocha将停留在此测试中,而未调用done函数.并且,一旦调用get函数的回调并进行断言,就会调用它.
现在,我们来看看代码.首先,您对完成的调用是不必要的(...).完成不作为任何回调的参数给出,因此它应该是未定义的,并且,如果执行该行,则只会出现语法错误.
现在,基本上,代码中发生的事情是函数的响应速度不够快,因此mocha认为测试已经超时(默认值为2000毫秒).
基本上,您应该开始测试在您的过程中逐个添加功能,以检查哪个是超时,然后才能将问题减少到超时功能.
如果你想学习摩卡,该框架的官方网站是相当不错的:http://mochajs.org/,并提出了一些很好的做法(比如使用之前和之后).
我希望我不会太长,我可以帮助你更好地理解mocha和javascript.