Frage

Ich mag JavaScript-Code innerhalb einer C # Montage und haben die Ergebnisse des JavaScript-Code zurück an den aufrufende C # Code auszuführen.

Es ist einfacher, die Dinge zu definieren, dass ich nicht versuchen zu tun:

  • Ich versuche nicht hinter eine JavaScript-Funktion auf einer Webseite von meinem Code aufzurufen.

  • Ich versuche nicht, ein WebBrowser-Steuerelement zu laden.

  • Ich will nicht die JavaScript ausführen einen AJAX-Aufruf an einen Server haben.

Was ich tun möchte, ist Schreib Unit-Tests in JavaScript und haben dann Unit-Tests Ausgang JSON, auch Klartext wäre in Ordnung. Dann möchte ich eine generische C # Klasse / executible haben, der die Datei mit der JS enthält laden können, die JS Unit-Tests laufen, Schrott / die Ergebnisse laden und geben einen Pass / Fail mit Details während einer Post-Build-Aufgabe.

Ich denke, es ist möglich, den alte ActiveX Scriptcontrol verwenden, aber es scheint, wie es sollte ein .NET-Weg, dies zu tun, ohne Silverlight zu verwenden, das DLR, oder irgendetwas anderes, das noch nicht ausgeliefert hat. Wer irgendwelche Ideen?

Update: Von Brad Abrams Blog

namespace Microsoft.JScript.Vsa
{
    [Obsolete("There is no replacement for this feature. " +
              "Please see the ICodeCompiler documentation for additional help. " +
              "http://go.microsoft.com/fwlink/?linkid=14202")]

Zur Verdeutlichung: Wir haben Unit-Tests für unsere JavaScript-Funktionen, die in JavaScript mit dem JSUnit Rahmen geschrieben werden. Gerade jetzt während unseres Build-Prozesses, müssen wir manuell eine Webseite laden und auf eine Schaltfläche klicken, um sicherzustellen, dass alle JavaScript-Unit-Tests bestehen. Ich möchte in der Lage sein, die Tests während der Post-Build-Prozess auszuführen, wenn unsere automatisierten C # Unit-Tests ausgeführt werden, und melden Sie den Erfolg / Misserfolg neben der aus C # Unit-Tests und nutzen sie als Indikator, ob die Build gebrochen wird.

War es hilfreich?

Lösung

Sie können Ihre JSUnit von innen Nant mit dem JSUnit Server laufen, es in Java geschrieben ist, und es gibt keine Aufgabe, Nant, aber Sie können es über die Eingabeaufforderung ausführen, werden die Ergebnisse als XML protokolliert und Sie können sie integrieren sie mit Build-Bericht Prozess. Dies wird nicht Teil Ihrer Nunit Ergebnis, sondern ein zusätzlicher Bericht sein. Wir versagen die Build wenn einer von diesen Test nicht besteht. Wir tun genau das CC.Net verwendet wird.

Andere Tipps

Der Code sollte ziemlich selbsterklärend sein, also werde ich nur, dass Post.

<add assembly="Microsoft.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies>

    using Microsoft.JScript;

    public class MyClass {

    public static Microsoft.JScript.Vsa.VsaEngine Engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();

        public static object EvaluateScript(string script)
        {
            object Result = null;
            try
            {
                Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

            return Result;
        }

        public void MyMethod() {
            string myscript = ...;
            object myresult = EvaluateScript(myscript);
        }


    }

Sie können die Microsoft Javascript-Engine verwenden für JavaScript-Code von C # Auswertung

Update: Dies ist veraltet wie von VS 2008

Ich weiß nicht, von jeder .NET-spezifische Art und Weise dieses Recht jetzt zu tun ... Nun, es ist immer noch JScript.NET, aber das wird wahrscheinlich nicht mit kompatibel sein, was auch immer JS Sie ausführen müssen:)

Offensichtlich ist die Zukunft wäre die .NET JScript-Implementierung für das DLR sein, das kommt ... irgendwann (hoffentlich).

Damit wahrscheinlich Blätter laufen den alten ActiveX JScript-Engine, die sicherlich möglich ist, so von .NET zu tun (ich habe es in der Vergangenheit getan, obwohl es ein bisschen auf der hässlichen Seite ist!).

Wenn Sie die Ausführung nicht den Code im Kontext eines Browsers, warum die Tests geschrieben werden müssen, in Javascript? Es ist schwer, das größere Bild von dem zu verstehen, was Sie versuchen hier zu erreichen.

Könnte es einfacher sein zu verwenden JSUnit Ihre Tests zu schreiben, und dann verwenden, um eine WatiN  Test-Wrapper sie durch C #, Bestehen oder Nichtbestehen auf der Grundlage der Ergebnisse JSUnit laufen?

Es ist in der Tat einen zusätzlichen Schritt though.

Ich glaube, ich irgendwo gelesen, dass eine kommende Version von entweder MBUnit oder WatiN wird die Funktionalität eingebaut hat JSUnit Prüfvorrichtungen zu verarbeiten. Wenn ich nur konnte sich erinnern, wo ich das gelesen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top