llamar funcion enviar ejecutar desde crear conectar con codigo asp c# .net javascript unit-testing codedom

c# - funcion - javascript en vb



Ejecute JavaScript desde dentro de un ensamblado C# (6)

No conozco ninguna forma específica de .NET para hacer esto ahora ... Bueno, todavía hay JScript.NET, pero probablemente no sea compatible con cualquier JS que necesite ejecutar :)

Obviamente, el futuro sería la implementación de .NET JScript para el DLR que viene ... algún día (con suerte).

Así que probablemente deje funcionando el viejo motor ActiveX JScript, que ciertamente es posible hacerlo desde .NET (lo he hecho en el pasado, ¡aunque está un poco desagradable!).

Me gustaría ejecutar el código JavaScript desde un ensamblado C # y hacer que los resultados del código JavaScript vuelvan al código C # que lo llama.

Es más fácil definir cosas que no estoy tratando de hacer:

  • No estoy intentando llamar a una función de JavaScript en una página web desde mi código.

  • No estoy intentando cargar un control WebBrowser.

  • No quiero que el JavaScript realice una llamada AJAX a un servidor.

Lo que quiero hacer es escribir pruebas unitarias en JavaScript y luego las pruebas unitarias producen JSON, incluso el texto plano estaría bien. Entonces quiero tener una clase C # genérica / ejecutable que pueda cargar el archivo que contiene el JS, ejecutar las pruebas de la unidad JS, eliminar / cargar los resultados, y devolver un pase / falla con detalles durante una tarea posterior a la construcción.

Creo que es posible usar el antiguo ActiveX ScriptControl, pero parece que debe haber una forma .NET de hacerlo sin usar SilverLight, el DLR o cualquier otra cosa que no se haya enviado aún. ¿Alguien tiene alguna idea?

actualización: del blog de Brad Abrams

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")]

Aclaración: tenemos pruebas unitarias para nuestras funciones de JavaScript que están escritas en JavaScript utilizando el marco JSUnit. En este momento, durante nuestro proceso de compilación, debemos cargar manualmente una página web y hacer clic en un botón para asegurarnos de que todas las pruebas de la unidad de JavaScript pasen. Me gustaría poder ejecutar las pruebas durante el proceso posterior a la construcción cuando se ejecutan nuestras pruebas de unidad C # automatizadas e informar el éxito / fracaso junto con las pruebas de unidad C # y utilizarlas como un indicador de si la construcción está roto.



Si no está ejecutando el código en el contexto de un navegador, ¿por qué las pruebas deben escribirse en Javascript? Es difícil entender la imagen más amplia de lo que estás tratando de lograr aquí.


Puede ejecutar su JSUnit desde dentro de Nant usando el servidor JSUnit, está escrito en Java y no hay una tarea Nant, pero puede ejecutarla desde el símbolo del sistema, los resultados se registran como XML y puede integrarlos con su informe de compilación proceso. Esto no será parte de su resultado de Nunit, sino un informe adicional. Fallamos la compilación si cualquiera de esas pruebas falla. Estamos haciendo exactamente eso usando CC.Net.


El código debería ser bastante explícito, así que solo publicaré eso.

<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); } }


¿Podría ser más simple usar JSUnit para escribir sus pruebas, y luego usar un contenedor de prueba WatiN para ejecutarlas a través de C #, aprobando o reprobando basándose en los resultados de JSUnit?

Sin embargo, es un paso adicional.

Creo que leí en alguna parte que una próxima versión de MBUnit o WatiN tendrá la funcionalidad incorporada para procesar los dispositivos de prueba JSUnit. Si solo pudiera recordar dónde lo leí ...