如何让content_shell运行我的测试?

时间:2013-12-21 19:05:55

标签: unit-testing dart

对此问题已经有了答案,但我认为这是新的。我正在尝试让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时

2 个答案:

答案 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。