【问题标题】:Chutzpah and Jasmine 2.0 and RequrieJsChutzpah 和 Jasmine 2.0 和 RequrieJs
【发布时间】:2015-04-04 11:42:02
【问题描述】:

我很难让 Chutzpah 与 requireJs/jasmine 2.0 一起工作。此方法适用于 1.3 版,但现在 jasmine 2.0 版 chutzpah 已停止接受测试。我也将 chutzpah 升级到 3.1.1 以获得 jasmine 2.0 支持。我确实需要做一些小改动才能从 requireJs 加载 jasmine 以使其工作,但我认为这不应该影响 chutzpah,因为它只是加载 html。

这是我为 chutzpah 运行的命令。

chutzpah.console.exe path/to/SpecRunner.html

控制台现在无法进行测试

=== 0 total, 0 failed, took 0.25 seconds ===

但是当我运行实际的 html 文件时,它会找到测试

任何帮助将不胜感激


我一直在尝试的不是 HTML 路由,而是内置的 chutzpah 配置

{
    "Framework": "jasmine",
    "TestHarnessReferenceMode": "AMD",
    "TestHarnessLocationMode": "SettingsFileAdjacent",
    "Tests": [
        {"Path" : "Specs/example.spec.js"}, 
    ],
    "References" : [
        {"Path" : "../../../Scripts/lib/require/require.js" }, 
        {"Path" : "../../../Scripts/app/app.js" }
    ]
}

这会运行,但是我遇到了一个错误

Error: Error: Script error for: specs/example.spec

Error: Timeout occured when executing test file
While Running:C:\path\to\specs\example.spec.js

System.AggregateException: One or more errors occurred. 
---> System.NullReferenceException: Object reference not set to an instance of an object.

at Chutzpah.FileProbe.<FindScriptFiles>d__1a.MoveNext() in c:\Dev\chutzpah\Chutzpah\FileProbe.cs:line 159

这里的路径绝对正确,因为我已将其复制并粘贴到资源管理器窗口中以确保。

测试是一个简单的编译咖啡脚本文件,看起来像这样

(function() {

  define([], function() {
    return describe('==== example test ====', function() {
      return describe('the test should', function() {
        return it('showcase toBe', function() {
          return expect(true).toBe(true);
        });
      });
    });
  });

}).call(this);

而且我确信它可以在我的浏览器中传递基于 html 的等效项。


这是我最终使用 html 的配置。我无法让它仅与发现测试的配置一起工作。希望在解决第 214 项时,如以下答案所示,这将得到解决

{
    "Framework": "jasmine",
    "RootReferencePathMode": "SettingsFileDirectory",
    "TestHarnessReferenceMode": "AMD",
    "TestHarnessLocationMode": "SettingsFileAdjacent",
    "Tests": [
        { "Path" : "specrunner.html" }
    ],
    "References" : [
        {"Path" : "../../../Scripts/lib/require/require.js" }, 
        {"Path" : "../../../Scripts/app/app.js" }
    ]
}

【问题讨论】:

  • 对我来说最好的帮助方法是,如果你能附上一个包含你正在尝试但不起作用的 zip 文件。我想查看无法运行的 .html 文件以及您为使其仅与 Chutzpah 配置一起工作而执行的代码。请将此 zip 附加到您在此处创建的工作项:chutzpah.codeplex.com/workitem/215
  • 谢谢,我会在下周初尝试整理一个精简的示例,因为所有这些都深深嵌套在我当前的项目中
  • 我明白了。感谢您的努力,因为这是我调试和诊断您的问题的最佳方式。
  • 嗨 Matthew,我在 github.com/bapti/chutzpah.problems 上放了一个精简版。非常感谢您花时间看它。我必须做一个解决方法才能在浏览器中使用 jasmine,所以也许这就是问题

标签: javascript requirejs jasmine chutzpah


【解决方案1】:

我查看了您的代码,这是我发现的

运行 HTML

如果您进行一些小的更改,这会很好。 1. chutzpah.json 文件中的测试设置有一个尾随逗号。这暴露了一个错误,其中反序列化器将其作为空条目返回,而 chutzpah 没有处理它。我会解决这个问题,但你可以删除多余的逗号。 2. 删除该命令后,我看到您的 chutzpah.json 文件有一个仅列出 .js 文件的测试设置。但是当运行 html 文件时,这就是你的测试文件。所以你的 chutzpah.json 被过滤掉了。如果您将测试设置更新为指向 html 文件,则此方法有效。

一旦我进行了这些更改,测试就会成功运行。

运行 Chutzpah.json

查看您在 SpecRunner 中加载 example.spec 的方式,您在 require 调用中引用了 .js 扩展名。这告诉 require.js 忽略 baseurl 并查看相对于当前位置的文件。当您让 chutzpah 生成测试工具时,它会生成一个不带扩展名的 require 调用。这意味着在给定当前 baseurl 设置的情况下需要能够加载文件。

现在 chutzpah 中有一个错误,它不理解 baseurl。见https://chutzpah.codeplex.com/workitem/214。计划中的解决方案是允许您在 chutzpah.json 文件中告诉 chutzpah 您的 baseurl 是什么。没有它,仍然可以让它工作,但你需要告诉 chutzpah 将其生成的 .html 文件放置在你的 baseurl 指向的位置。

如果有帮助,请告诉我。

【讨论】:

  • 真是太好了,感谢您的帮助,尤其是在周末。我现在已经使用 html 直接调用 html 文件并使用 config.xml 中的测试工具来让它工作。我尝试只使用纯配置路线并使用自定义和路径。这运行,找到规范文件,但说没有测试。奇怪!
  • 我调试了它,你发现了一个错误!恭喜。使用 AMD 时,当线束位于另一个目录中时,Chutzpah 无法正确生成路径。我将把它作为工作项 214 的一部分进行修复。
【解决方案2】:

我遇到了和你类似的问题,没有一个测试被厚颜无耻地接受。我发现因为我使用的是 require.js,所以我已经从我的 specRunner.html 中删除了对 jasmine.js 的所有脚本引用。我一放回去

&lt;!--&lt;script src="jasmine.js"&gt;&lt;/script&gt;--&gt;

进入我的 specRunner.html,一切正常。即使脚本标记已被注释掉,并且路径甚至不正确,这也有所作为。我的猜测是,如果您没有配置 Chutzpah.json,那么 chutzpah 只会扫描您尝试运行的文件以查看它是什么。如果它可以找到 jasmine 的脚本标签(即使它被注释掉了),它知道它是一个 jasmine 规范运行器,并执行一些特定于 jasmine 的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2017-06-21
    • 2013-11-13
    • 2016-07-18
    • 2013-02-22
    相关资源
    最近更新 更多