Visual studio 无法使用Chutzpah在Visual Studio中加载jasmine jquery装置,甚至无法在浏览器中加载

Visual studio 无法使用Chutzpah在Visual Studio中加载jasmine jquery装置,甚至无法在浏览器中加载,visual-studio,jasmine,jasmine-jquery,chutzpah,Visual Studio,Jasmine,Jasmine Jquery,Chutzpah,我正在原型化一个MVC.NET4.0应用程序,并正在定义我们的Javascript测试配置。我设法让Jasmine在VS2012中使用Chutzpah扩展,并且我能够成功地运行纯Javascript测试 但是,我无法加载测试夹具(DOM)代码并从测试中访问它 以下是我尝试运行的代码: test.js ///各种引用路径。。。 jasmine.getFixtures().fixturesPath=“./”; 描述(“茉莉花测试:”,功能(){ 它(“正确复制数据”,函数(){ LoadFixtur

我正在原型化一个MVC.NET4.0应用程序,并正在定义我们的Javascript测试配置。我设法让Jasmine在VS2012中使用Chutzpah扩展,并且我能够成功地运行纯Javascript测试

但是,我无法加载测试夹具(DOM)代码并从测试中访问它

以下是我尝试运行的代码:

test.js
///各种引用路径。。。
jasmine.getFixtures().fixturesPath=“./”;
描述(“茉莉花测试:”,功能(){
它(“正确复制数据”,函数(){
LoadFixture('testfixture.html');
//固定装置(“”);
var小部件=$(“#包装”);
expect(widget.toExist();
});
});
夹具与测试文件位于同一文件夹中。
setFixtures
操作可以工作,但是当我尝试从文件加载HTML时,它不能工作。起初,我试图使用存储库中最新版本的jasmine jquery,但后来又回到了已有1年多历史的下载版本1.3.1,因为新版本中似乎有一个bug。以下是我从1.3.1中得到的信息:

测试“jasmine测试::正确复制数据”失败 错误:无法在中加载装置:./testfixture.html(状态:错误,消息:未定义)file:///C:/Users/db66162/SvnProjects/MvcPrototype/MvcPrototype.Tests/Scripts/jasmine/jasmine-jquery-1.3.1.js(第103行)

当我检查源代码时,它正在执行AJAX调用,但我没有在浏览器中运行。相反,我使用的是Chutzpah,它运行一个无头浏览器(PhantomJS)。当我使用测试线束在浏览器中运行此功能时,它确实起作用


有没有人能解决这个问题?我需要能够在VisualStudio和TeamCity中自动运行这些测试(这就是我使用Chutzpah的原因)。我对解决方案持开放态度,包括使用另一个测试运行程序来代替Chutzpah。在这项工作中,我还将评估qUnit测试框架,因此如果您知道qUnit在我的配置中没有这个问题,我会发现这很有用。

我也遇到了完全相同的问题。好吧,当测试通过file://URI模式运行时,jasminejquery试图通过Ajax加载fixture

显然Chrome不允许这样做(请参阅和),其他浏览器的支持可能会有所不同

编辑 通过尝试设置一些PhantomJS命令行选项,例如
--websecurity=false
,您可能会有一些乐趣。YMMV:我自己还没有尝试过,但我想我会提到它,以防它有用(或者其他人知道更多关于这个选项的信息,以及它是否有用)

更新 通过在Jasmine规范的顶部添加
//
注释,我确实在加载HTML装置时获得了一些乐趣。但加载JSON装置时仍然有困难

进一步更新
通过添加
//
注释加载HTML装置只会将HTML装置加载到Jasmine test runner,这可能适合您的需要,也可能不适合您的需要。它不会将夹具加载到
jasmine fixtures
元素中,因此每次测试后您的夹具都不会得到清理。

我最终解决了问题。谢谢你的回复。我能够使用TeamCity中的PhantomJS通过测试运行程序运行测试。我联系了Chutzpah的作者,他为他的产品部署了一个更新,解决了我在VisualStudio中的问题。现在,我可以在VS中使用Chutzpah约定运行Jasmine测试,以引用库和包含装置,并在TeamCity中使用PhantomJS运行程序来使用测试运行程序(html)

我在TeamCity上的解决方案是运行一个启动测试的批处理文件。因此,该批次:

@echo off
REM -- Uses the PhantomJS headless browser packaged with Chutzpah to run 
REM -- Jasmine tests.  Does not use Chutzpah.
setlocal
set path=..\packages\Chutzpah.2.2.1\tools;%path%;
echo ##teamcity[message text='Starting Jasmine Tests']
phantomjs.exe phantom.run.js %1
echo ##teamcity[message text='Finished Jasmine Tests']
以及Javascript(phantom.run.js):


我通过将以下设置添加到chutzpah.json中修复了该问题:

"TestHarnessLocationMode": "SettingsFileAdjacent",
chutzpah.json在我的测试应用程序根目录中的位置

// This code lifted from https://gist.github.com/3497509.
// It takes the test harness HTML file URL as the parameter.  It launches PhantomJS,
// and waits a specific amount of time before exit.  Tests must complete before that 
// timer ends.  
(function () {
    "use strict";
    var system = require("system");
    var url = system.args[1];

    phantom.viewportSize = {width: 800, height: 600};

    console.log("Opening " + url);

    var page = new WebPage();

    // This is required because PhantomJS sandboxes the website and it does not
    // show up the console messages form that page by default
    page.onConsoleMessage = function (msg) {
        console.log(msg);

        // Exit as soon as the last test finishes.
        if (msg && msg.indexOf("Dixi.") !== -1) {
            phantom.exit();
        }
    };

    page.open(url, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(-1);
        } else {
            // Timeout - kill PhantomJS if still not done after 2 minutes.
            window.setTimeout(function () {
                phantom.exit();
            }, 10 * 1000); // NB: use accurately, tune up referring to your needs
        }
    });
}());
"TestHarnessLocationMode": "SettingsFileAdjacent",