【问题标题】:Dart pub build: consistency between dart version and compiled js versionDart pub build:dart 版本和编译后的 js 版本之间的一致性
【发布时间】:2015-03-19 09:44:30
【问题描述】:

我有一个 Polymer Dart 应用程序,在其开发过程中,它经历了以下两个阶段:

第 1 阶段:它可以工作(功能完整且构建正常),但没有自动测试。 (因此,为了保证它的行为与预期的行为一样,我必须手动单击某个按钮,在某些输入字段中输入一些文本,才能看到它的行为是否正确。)

第 2 阶段:我在应用程序中添加了一些测试代码,使用 unittest 包测试应用程序是否正常工作。该测试针对未编译的 dart 代码,在 Dartium 中运行,在 pub build 之前。然后我添加了一个转换器,lib/transformer.dart,这样,当pub build 时,我的转换器将删除应用程序中所有与测试相关的代码,因此 Polymer、dart2js 和其他转换器将看到它们在阶段 1 中看到的完全相同的代码,除了第一阶段,没有lib/transformer.dart。

我的问题是:

A. (对于第一阶段)我应该担心 dart 版本和编译的 js 版本之间的一致性吗?即,我可以安全地假设,如果我的代码在 dart 版本中正常工作,它在 js 版本中也能正常工作吗?

B.假设我的转换器完全按照它应该做的,即删除所有新添加的,测试相关代码,(当然除了转换器本身),还假设我的应用程序的 js 版本已经在阶段 1 中正常工作,请问stage 2的js版本也能正常工作吗?

注意:为什么我在 dart 版本而不是 js 版本中运行测试?因为在js版本中不引入测试代码我不知道怎么做,即我不希望js版本包含测试代码。

谢谢。

【问题讨论】:

    标签: unit-testing dart dart-polymer


    【解决方案1】:

    A:是的,你应该担心。 在客户端使用 Dart 代码主要是为了加快开发速度。最后,您必须确保构建的应用程序正确运行。 通常它们的工作方式相同,但根本无法保证。有很多微妙和不那么微妙的差异(时间、浏览器差异……)

    B:我猜是因为 A 不适用。

    当您将单元测试代码放在your_package/test 中时,您无需担心生产环境中的测试代码。此代码仅在您明确执行 (pub build test) 时才构建到 JS,而不是默认情况下 (pub build)。 your_package/lib、your_package/web、your_package/bin 中的生产代码应该不包含任何测试代码。 如果是这样,您可能做错了什么。

    您应该使用 JavaScript 构建您的测试,并使用您所针对的每个版本中的每个浏览器测试您的应用。

    【讨论】:

    • dart 是否保证相同代码上的两个pub build 会产生相同的 js?
    • 我不确定你的意思。我不认为这是有保证的。它将保证语义等效的代码。使用的缩小名称可能会因一个构建与另一个构建不同。例如,如果事情是并行完成的,并且两次运行之间的时间不同,但我不知道这是否真的如此。我记得在某处提到过,即使代码更改了,他们也打算使用相同的缩小名称,但当然不能保证。
    • 如果我理解正确的话,进行聚合物飞镖单元测试的常用方法是这样的:你写一个<my-elem>,然后你写一个.html 和一个使用.dart 的<my-elem> ,将这两个文件放在my_package/test/ 下,对所有自定义元素重复此操作,然后pub build test 看看它们是否正常工作。
    • ... 我正在做的是,使用unittest,但并没有真正使用它来进行单元测试,而是对整个应用程序进行测试,更像是一个自动化工具 - 为我单击此按钮,输入'foo'到那个<input>,这种东西。这样做的好处是,我不必维护很多测试.html(自定义元素的入口点),并且如果我更改了某些内容,则会测试整个应用程序,以防我忘记更改 Foo 会影响 Bar?你能从我的方法中看出什么缺点吗?
    • 回复第二条评论:语义等价的代码就够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2015-09-20
    相关资源
    最近更新 更多