对此问题已经有了答案,但我认为这是新的。我正在尝试让drone.io在content_shell中运行我的测试。我按照说明启动了X服务器。通过download_contentshell.sh脚本下载了content_shell。并根据我从这里找到的答案和其他来源获得的说明执行content_shell。问题是它们都不起作用。 content_shell不会运行我的测试,除非我给它一个绝对文件路径,但如果我这样做,当它运行测试时,它会失败,因为它不能使用所需的导入。以下是我在drone.io设置中运行测试脚本所做的工作
sudo start xvfb
pub install
test/run.sh
这是run.sh脚本
#!/bin/bash
which content_shell
if [[ $? -ne 0 ]]; then
$DART_SDK/../chromium/download_contentshell.sh
unzip content_shell-linux-x64-release.zip
cs_path=$(ls -d drt-*)
PATH=$cs_path:$PATH
fi
results=$(content_shell --args --dump-render-tree test/index.html 2>&1)
echo -e "$results"
# check to see if DumpRenderTree tests
# fails, since it always returns 0
if [[ "$results" == *"Some tests failed"* ]]
then
exit 1
fi
if [[ "$results" == *"Exception: "* ]]
then
exit 1
fi
这是飞镖测试文件
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
import 'dart:html';
import 'dart:async';
import 'package:polymer/polymer.dart';
main() {
// Ensure Polymer is looking for bound variables...
addXParent();
initPolymer();
removeXParent();
setUp(addXParent);
tearDown(removeXParent);
group("encountermap", (){
test('has canvas element', (){
new Timer(
new Duration(milliseconds: 2500),
expectAsync0((){
expect(
querySelector('encounter-map').shadowRoot.querySelector('canvas'),
isNotNull
);
})
);
});
test("contains file input element", (){
new Timer(
new Duration(milliseconds: 2500),
expectAsync0((){
expect(
querySelector('encounter-map').shadowRoot.querySelector('input'),
isNotNull
);
expect(
querySelector('encounter-map').shadowRoot.querySelector('input'),
new isInstanceOf<FileUploadInputElement>()
);
expect(
querySelector('encounter-map').shadowRoot.querySelector('input').attributes['type'],
contains('file')
);
})
);
});
});
}
addXParent() {
document.body.append(createElement('<encounter-map></encounter-map>'));
}
removeXParent() {
querySelectorAll('encounter-map').forEach((el)=> el.remove());
}
createElement(String html) =>
new Element.html(html, treeSanitizer: new NullTreeSanitizer());
class NullTreeSanitizer implements NodeTreeSanitizer {
void sanitizeTree(node) {}
}
和index.html文件
<head>
<!-- Load component(s) -->
<link rel="import" href="packages/RPGHelper/encountermap.html">
<script type="application/dart" src="test.dart"></script>
<script src="packages/unittest/test_controller.js"></script>
</head>
我看过这个测试已经运行,所有发生的事情都是content_shell没有退出,停止脚本完成,从而超时。您可以找到此项目的完整来源here
这真的让我起了作用。这是一个错误吗?如果它有所不同我使用的飞镖版本是“Dart SDK版本1.1.0-dev.4.0”
此测试在“Dart编辑器版本1.1.0.dev_04_00(DEV)”中运行完美,而不是在使用content_shell时
答案 0 :(得分:2)
在向Chris Strom询问之后我就开始工作了。好像我没有使用以下
useHtmlConfiguration(true);
看起来很傻,因为我很确定我在其他地方看到了这个。你还需要确保,我一直在做那个
import 'package:unittest/html_config.dart';
完成了,因为那是
useHtmlConfiguration(true);
来自。这将确保在所有测试完成后发送正确的信号以关闭窗口。现在我的DroneIO测试通过: - )
答案 1 :(得分:1)
新的test
软件包支持开箱即用。
在@TestOn('browser')
文件中的库语句上方添加*_test.dart
并运行pub global activate test
以安装新的测试运行器和pub global run test -pcontent-shell
以运行测试。
在发布稳定版本之前,请使用pub global activate test '>0.12.0-beta.6'
或pub global activate -sgit git@github.com:dart-lang/test.git
此外,不支持当前使用Dart发布的content_shell
版本。目前仅支持最新版本(请参阅https://github.com/dart-lang/test/issues/68),但现在也支持Dartium,Chrome,FireFox,Phantom.js。