PhantomJS jest WebKit bezgłowy z API JavaScript. Posiada szybką i natywną obsługę różnych standardów internetowych: obsługi DOM, selektora CSS, JSON, Canvas i SVG. Jest to kompletny zestaw optymalnych rozwiązań do bezgłowego testowania witryny, przechwytywania ekranu, automatyzacji strony i monitorowania sieci.

Proponuję, aby skorzystać z tej ramy, jeśli chcesz przetestować niektóre biblioteki JavaScript i nie chcą korzystać z zainstalowaną przeglądarkę na komputerze testowym.
1.Upewnij się, że już ustawiłeś autostart z QUnit na false.
QUnit.config.autostart = false;
2. Download PhantomJS executable file dla Windows, dodać do swojego projektu i ustaw "Copy to Output Directory" równa się "Copy jeśli nowsze".
3. Utwórz proces uruchamiania PhantomJS.exe z 2 argumentami, które są plikiem JavaScript i przetestowanym adresem URL strony.
var scriptPath = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../PhantomScript/main.js"));
var pageUrl = "file:///" + Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../QUnitExample/qunit-demo.htm")).Replace('\\', '/');
var process = new Process
{
StartInfo =
{
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "phantomjs.exe",
Arguments = "\"" + scriptPath + "\" \"" + pageUrl + "\""
}
};
4. Rozpocznij proces i sprawdź kod zakończenia tego procesu.
process.Start();
process.WaitForExit();
Assert.AreEqual(process.ExitCode, 0);
W pliku JavaScript, używam eveluateAsync dostępu do kontekstu strony do uruchomienia testu QUnit, poczekać, aż zakończy się i zaloguj ilość testów nie powiodło się.
page.evaluateAsync(function()
{
QUnit.done(function(response)
{
console.log('!Exit' + response.failed);
});
QUnit.start();
// If QUnit finish after 2500 ms, system will exit application with code -1.
setTimeout(function()
{
console.log('!Exit-1');
}, 2500);
});
Do obsługi rejestru używam następującego kodu do zamykania procesu z kodem wyjścia.
var exitCodeName = '!Exit';
page.onConsoleMessage = function (msg)
{
if (msg.indexOf(exitCodeName) == 0)
{
var exitCode = parseInt(msg.substring(exitCodeName.length).trim(), 10);
phantom.exit(exitCode || 0);
}
};
PS. Dostarczam również pełny kod źródłowy (VS2012) do mojego SkyDrive. Możesz pobrać go pod poniższym linkiem.
PhantomJS Test project
To demo projekt, jak uruchomić PhantomJS w MSTest.
PhantomJS Form project
Ten projekt jest PhantomJS wrapper, który napisał w C# Windows Form. Używam tego do testowania plików "main.js" i "core.js" przed użyciem go w projekcie testowym.

# 1 Ograniczenie, brak możliwości przechwytywania konsoli.wyjście dziennika z JavaScript, które zwykle używane jest w złożonym systemie. –
# 2 Ograniczenie, maksymalny skrypt asynchroniczny wykonywania to jedna minuta. –