Visual studio 无法使用Chutzpah在Visual Studio中加载jasmine jquery装置,甚至无法在浏览器中加载
我正在原型化一个MVC.NET4.0应用程序,并正在定义我们的Javascript测试配置。我设法让Jasmine在VS2012中使用Chutzpah扩展,并且我能够成功地运行纯Javascript测试 但是,我无法加载测试夹具(DOM)代码并从测试中访问它 以下是我尝试运行的代码: test.jsVisual 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
///各种引用路径。。。
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",