5

我很难让 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" }
    ]
}
4

2 回答 2

6

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

运行 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 中有一个错误,它不理解 baseurls。请参阅https://chutzpah.codeplex.com/workitem/214。计划中的解决方案是允许您在 chutzpah.json 文件中告诉 chutzpah 您的 baseurl 是什么。没有它,仍然可以让它工作,但你需要告诉 chutzpah 将其生成的 .html 文件放置在你的 baseurl 指向的位置。

让我知道这是否有帮助。

于 2014-03-02T05:36:46.633 回答
0

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

<!--<script src="jasmine.js"></script>-->

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

于 2015-04-04T03:25:17.590 回答