我正在尝试测试实习生,看看它是否适合测试框架.我试图在实习生中测试以下代码.
var HelloWorld;
HelloWorld = (function () {
function HelloWorld (name) {
this.name = name || "N/A";
}
HelloWorld.prototype.printHello = function() {
console.log('Hello, ' + this.name);
};
HelloWorld.prototype.changeName = function(name) {
if (name === null || name === undefined) {
throw new Error('Name is required');
}
this.name = name;
};
return HelloWorld;
})();
exports = module.exports = HelloWorld;
Run Code Online (Sandbox Code Playgroud)
该文件位于'js-test-projects/node/lib/HelloWorld.js'中,Intern位于'js-test-projects/intern'.我正在使用实习生的1.0.0分支.每当我尝试包含文件并运行测试时,在"默认为控制台记者"之后我都没有得到任何输出.这是测试文件.
define([
'intern!tdd',
'intern/chai!assert',
'dojo/node!../lib/HelloWorld'
], function (tdd, assert, HelloWorld) {
console.log(HelloWorld);
});
Run Code Online (Sandbox Code Playgroud) 我在让Intern 2等待元素出现时遇到问题.在Intern 1中,我 wait()用来设置页面的快速时间段,以便在某些用户操作之后等待元素出现.对于Intern 2,似乎setFindTimeout()应该总是告诉一个find()方法等待元素存在.我已经设置setFindTimeout()并尝试使用pollUntil来处理这些等待,但测试仍然失败,错误"元素不可见".
这是一个示例测试,它使用与我的实际测试相同的要求,并且正在寻找在此页面加载后5秒出现的元素Id .
define([
'intern!object',
'intern/chai!assert',
'require',
'tests/util',
'intern/dojo/node!leadfoot/Command',
'intern/dojo/node!leadfoot/Session',
'intern/dojo/node!leadfoot/helpers/pollUntil'
], function (registerSuite, assert, require, util, Command, Session, pollUntil) {
registerSuite([
{
name: 'testing_find_by_wait',
test_create_form_on_web: function() {
console.log('Create a form with account, number, number and formula fields')
return this.remote
.setFindTimeout(10000)
.setWindowSize(1280, 960)
.get("http://www.kgstew.com/waittest.html")
.then(pollUntil('return document.getElementById("demo")', 10000))
.findById('demo')
.click()
.end()
}
}
]);
});
Run Code Online (Sandbox Code Playgroud) 当我使用实习生运行单元测试时,它会将console.log写入标准输出,这在开发测试时很有用.
但是,功能测试显然会抑制输出 - 写入console.log没有做任何事情,我找不到任何方法将文本输出到控制台.这意味着当出现问题时,很难找出原因.
根据标题,我正在尝试测试一些用nodejs运行的ES6 JS编写的AMD模块.
我首先尝试使用Intern:即使--harmony在nodejs中启用后,我最终还是面对了Intern的依赖链,我无法在例如伊斯坦布尔,esprima和其他人中启用Harmony (我为此开了一个问题).
然后我转移到摩卡上,在这里我被卡住...... 奇怪的是.我为nodejs和mocha本身启用了Harmony,这是package.json测试脚本:
"test": "node --harmony node_modules\\mocha\\bin\\mocha tests --harmony --recursive"
Run Code Online (Sandbox Code Playgroud)
我从命令提示符运行为npm test my_test_folder.仍然,一些ES6构造(如const)传递确定,但随后它在解构赋值时窒息.这是第一个输出行:
const { log, dir } = require('../consoleLogger.js');
^
SyntaxError: Unexpected token {
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
[...continues...]
Run Code Online (Sandbox Code Playgroud)
我也检查了这个SO线程并听说过转发器,但我真的不知道它们是否可以工作,我现在正试图让转换器在这种情况下工作.
关于如何解决这个问题的任何想法,而无需改变代码中传播的所有ES6位?TA.
我尝试远程调试Internjs运行的测试.基本上它是由Selenium和Chromedriver运行的Chrome.
我将Chromedriver debuggerAddress选项设置为
debuggerAddress: '127.0.0.1:8765'
Run Code Online (Sandbox Code Playgroud)
现在,当我运行测试时,Selenium会等待一段时间而不是失败并显示消息:
FATAL ERROR
UnknownError: [POST http://localhost:4444/wd/hub/session / {"desiredCapabilities":{"browserName":"chrome","name":"tests/intern_local","idle-timeout":60,"selenium-version":"2.44.0","chromeOptions":{"debuggerAddress":"127.0.0.1:8765"}}}] unknown error: cannot connect to chrome at 127.0.0.1:8765
from chrome not reachable
(Driver info: chromedriver=2.12.301326 (093c7e07b4a916b690e784b0374c7f618f1ea4be),platform=Mac OS X 10.10.1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.64 seconds
Run Code Online (Sandbox Code Playgroud)
我不知道我必须做什么才能将chrome连接到服务器.
我试过了:
./chromedriver_2.11 --port=8765--remote-debugging-port=8765但我没有其他想法如何启动chrome调试服务器.
我尝试过的有用链接对我不起作用:
更新1强制Chromedriver使用带有远程调试的Chrome实例
像在Mozilla文章中一样运行新的Chrome实例
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --no-first-run --no-default-browser-check --user-data-dir=$(mktemp -d -t 'chrome-remote_data_dir')
Run Code Online (Sandbox Code Playgroud)
在实习生集
intern.capabilities = {
'selenium-version': …Run Code Online (Sandbox Code Playgroud) selenium google-chrome remote-debugging selenium-chromedriver intern
我正在使用 Grunt 来启动一个单元测试框架 (Intern),它最终会通过管道传输另一个 node.js 进程,然后我使用 Charm 将结果输出到屏幕。我必须从 Grunt 配置选项传递终端大小信息,但这有点混乱,我想尝试从管道进程中获取终端大小,但标准 process.stdout.cols/getWindowSize根本不可用,因为管道进程没有注册为 TTY(尽管 Charm 可以正常工作)。
有什么建议?
编辑只是在这里要清楚...... Grunt JavaScript 文件正在主 node.js 进程中运行,但我试图从中检索此信息的文件(以及我因此运行人们建议的命令的位置)位于产生的子进程。
我的jenkins版本是1.608,JUnit插件是1.2beta4。在本地运行测试时,我可以看到报告生成正确,但是在运行构建时,它失败了[也没有在文件夹中看到报告]。文件夹结构如下所示workspace/java/src/proj/test/test1/*.xml.
:不确定是什么问题。直到上周为止还不错。jenkins配置还在“发布Junit测试报告”部分中给出了显示错误。‘src\proj\test\test1\report.xml’ doesn’t match anything: ‘src’ exists but not ‘src\proj\test\test1\report.xml’
错误-
Build step 'Execute Windows batch command' marked build as failure
Recording test results
ERROR: Publisher hudson.tasks.junit.JUnitResultArchiver aborted due to exception
hudson.AbortException: No test report files were found. Configuration error?
at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:116)
at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:92)
at hudson.FilePath$FileCallableWrapper.call(FilePath.java:2688)
at hudson.remoting.UserRequest.perform(UserRequest.java:121)
at hudson.remoting.UserRequest.perform(UserRequest.java:49)
at hudson.remoting.Request$2.run(Request.java:325)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at java.util.concurrent.FutureTask.run(FutureTask.java:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627)
at hudson.remoting.Engine$1$1.run(Engine.java:69)
at java.lang.Thread.run(Thread.java:798)
at ......remote call to tm1w08perf11-5000(Native Method)
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1360)
at hudson.remoting.UserResponse.retrieve(UserRequest.java:221)
at hudson.remoting.Channel.call(Channel.java:753)
at hudson.FilePath.act(FilePath.java:978) …Run Code Online (Sandbox Code Playgroud) 为简单起见,假设我有以下 DOM 结构:
<div class='myparent'>
<div class='child'>
<div class="label">A</div>
<div class="ico"/>
</div>
<div class='child'>
<div class="label">B</div>
<div class="ico"/>
</div>
<div class='child'>
<div class="label">C</div>
<div class="ico"/>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我想在child函数 findAllByCssSelector('.child') 返回的所有元素中循环。ico特别是,只有当labeldiv 的 是 B时,我才会单击div 子元素。
我会记得,那findAllByCssSelector()回来了Promise.<Array.<leadfoot/Element>>。
通常我应该做类似的事情:
var my_label = null;
this.remote
.findAllByCssSelector('.my-selector').then(function (elementArray) {
for(.....) {
elementArray[i]
.getVisibileText()
.then(function (text) {
if(text == my_label)
elementArray[i].findByCssSelector('.ico').click().end()
}
}
})
Run Code Online (Sandbox Code Playgroud)
我尝试了这段代码,但没有用,因为函数elementArray[i]内getVisibleText().then()不存在 - 就像我失去了它的引用一样。此外,我还需要,如果在循环末尾找不到标签,则应抛出异常。
我怎样才能做到这一点?有人可以帮忙吗?
我正在使用 Intern/Leadfoot 编写一些功能测试。这些测试是端到端测试(也称为故事),它们之间存在某种数据依赖性。我的意思是,如果之前的测试 (test1) 没有成功完成,则测试 (即 test2) 将失败。因此,为了避免运行肯定失败的测试,我想跳过它们(或其中的一部分)。因此,我想知道是否有办法实现这一目标。
考虑到所有 test.js 文件都类似于以下文件:
define([
"require",
"intern",
"intern!object",
"../../support/executor/executor"],
function(require, intern, registerSuite, Executor) {
var executor;
var steps = [
// set of actions,
// like login, click this button,
// then assert that ....
];
registerSuite(function() {
return {
setup: function() {
executor = new Executor(this.remote, steps.slice(0));
},
"Test 1": function() {
return executor.run();
},
};
});
});
Run Code Online (Sandbox Code Playgroud)
这意味着每个 js 文件都是一个仅包含一个测试的套件。换句话说,如果前一个失败,我想跳过所有剩余的套件。