我正在为MVC.NET 4.0应用程序进行原型设计,并定义了我们的Javascript测试配置。我设法让使用Chutzpah扩展的VS2012中的Jasmine工作,并且我能够成功运行纯Javascript测试。
但是,我无法加载测试夹具(DOM)代码并从我的测试中访问它。
以下是我试图运行的代码:
/// various reference paths...
jasmine.getFixtures().fixturesPath = "./";
describe("jasmine tests:", function () {
it("Copies data correctly", function () {
loadFixtures('testfixture.html');
//setFixtures('<div id="wrapper"><div></div></div>');
var widget = $("#wrapper");
expect(widget).toExist();
});
});
灯具与测试文件位于同一文件夹中。 setFixtures
操作有效,但是当我尝试从文件加载HTML时,它不会。最初,我尝试从存储库中使用最新版本的jasmine-jquery,但后来又回到了超过1年的下载版本1.3.1,因为看起来新版本中存在一个错误。这是我用1.3.1获得的信息:
测试'茉莉花测试::正确复制数据'失败 错误:无法加载Fixture:./ testfixture.html(status:error,message:undefined)in file:/// C:/Users/db66162/SvnProjects/MvcPrototype/MvcPrototype.Tests/Scripts/jasmine/jasmine-jquery -1.3.1.js(第103行)
当我检查源代码时,它正在进行AJAX调用,但我没有在浏览器中运行。相反,我正在使用Chutzpah,它运行无头浏览器(PhantomJS)。当我在浏览器中使用测试工具运行它时,它确实有效。
那里有人有解决这个问题的方法吗?我需要能够在Visual Studio和TeamCity中自动运行这些测试(这就是我使用Chutzpah的原因)。我愿意接受使用另一个测试运行器代替Chutzpah的解决方案。我也将在这项工作中评估qUnit测试框架,所以如果你知道qUnit在我的配置中没有这个问题,我会发现它很有用。
答案 0 :(得分:1)
我通过将以下设置添加到chutzpah.json来修复此问题:
"TestHarnessLocationMode": "SettingsFileAdjacent",
chutzpah.json在我的测试应用根
中答案 1 :(得分:0)
我有完全相同的问题。 AFAIK与jasmine-jquery有关,当通过file:// URI方案运行测试时,尝试通过Ajax加载fixture。
显然Chrome不允许这样做(请参阅https://stackoverflow.com/a/5469527/1904和http://code.google.com/p/chromium/issues/detail?id=40787),其他浏览器支持可能会有所不同。
通过尝试设置一些PhantomJS命令行选项(例如--web-security=false
),可能感到高兴。 YMMV虽然:我还没有尝试过这个,但我想如果它有用(或者如果其他人知道更多关于这个选项以及它是否有帮助的话)我会提到它。
我 通过在我的Jasmine规范的顶部添加/// <reference path="relative/path/to/fixtures" />
评论来设法加载HTML工具。但是我仍然无法加载JSON灯具。
通过添加/// <reference path="relative/path/to/fixtures" />
注释来加载HTML工具只会在您的HTML工具中加载到Jasmine测试运行器,这可能适合您的需求,也可能不适合您。 没有将灯具加载到jasmine-fixtures
元素中,因此每次测试后都不会清理灯具。
答案 2 :(得分:0)
我最终解决了问题。谢谢Ian的回复。我可以在TeamCity中使用PhantomJS来通过测试运行器运行测试。我联系了Chutzpah的作者,他为他的产品部署了一个更新,解决了我在Visual Studio中遇到的问题。我现在可以使用Chutzpah约定运行Jasmine测试来引用库并在VS中包含fixture,并使用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):
// 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
}
});
}());