DART单元测试结果可追溯更改

时间:2014-03-20 21:48:37

标签: unit-testing dart

我编写了一些模拟用户活动的DART单元测试,并在其他检查中检查特定的可视元素(div或iframe)是否可见:

  documentviewerDiv.hidden = true;

  print('Checking if page panel is hidden');
  test('Checking if page panel is hidden',(){
    expect(documentviewerDiv.hidden, true);
  });

如果元素在整个测试过程中保持隐藏状态,则结果与预期一致:

  PASS
  1 PASS    Expectation: Checking if all UI components are present.
  .....
  3 PASS    Expectation: Checking if page panel is hidden.
   ....

但是,如果元素的可见性在测试结束时发生变化,例如:

  documentviewerDiv.hidden = false;

测试结果以这种方式动态更新(实际上,我可以看到旧结果被新结果替换):

      1 PASS    Expectation: Checking if all UI components are present.
...
      3 FAIL    Expectation: Checking if page panel is hidden. Expected: <true> Actual: <false>

package:unittest/src/expect.dart 75:29     expect
documentviewertest.dart 293:15             repositoryListComplete.<fn>
dart:async                                 _asyncRunCallback
file:///E:/b/build/slave/dartium-win-full-stable/build/src/dart/tools/dom/src/native_DOMImplementation.dart 607  _handleMutation

每次其可见性发生变化并动态更新输出时,都会重新评估元素可见性的所有以前的测试

如何防止此行为将成功的测试结果修改为不成功追溯?

以下是显示此行为的简单测试代码:

HTML部分:

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>TestChange</title>
    <link rel="stylesheet" href="clickme.css">
  </head>
  <body>
    <h1>TestChange</h1>

    <div id="myDiv">
     Now you see me
    </div>

    <script type="application/dart" src="clickme.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

DART部分:

import 'dart:html';
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';

void main() {

  useHtmlConfiguration();
  var myDiv = querySelector("#myDiv");

  myDiv.hidden = true;
  test("Test visibility 1", (){
    expect(myDiv.hidden, true, reason:"Is it still visible");
  });


  myDiv.hidden = false;
  test("Test visibility 2", (){
    expect(myDiv.hidden, false, reason:"Is it still invisible");
  });

}

测试运行时,第一次测试报告为失败。如果注释掉myDiv.hidden = true,则第一次测试成功。

1 个答案:

答案 0 :(得分:0)

正如我所看到的,问题是你设置了outside测试的可见性。

test('sometext', () {
   // some code
});

只是为要执行的测试列表添加一个闭包。 main方法中的外观不一定定义测试的执行顺序。

您的测试将按此执行

  • myDiv.hidden = true;
  • test("Test visibility 1", () ...) // register test "Test visibility 1"
  • myDiv.hidden = false;
  • test("Test visibility 2", () ...) // register test "Test visibility 2"
  • (){ expect(myDiv.hidden, true, reason:"Is it still visible"); }
  • (){ expect(myDiv.hidden, false, reason:"Is it still invisible"); }

<强> HINT

import 'package:unittest/html_enhanced_config.dart';
useHtmlEnhancedConfiguration();

而不是

useHtmlConfiguration();

您可以更好地查看测试结果输出