Вопрос

Я хотел бы выполнить код JavaScript из сборки C# и вернуть результаты кода JavaScript в вызывающий код C#.

Легче определить вещи, которые я не пытаюсь делать:

  • Я не пытаюсь вызвать функцию JavaScript на веб-странице из своего кода.

  • Я не пытаюсь загрузить элемент управления WebBrowser.

  • Я не хочу, чтобы JavaScript выполнял вызов AJAX на сервер.

Я хочу написать модульные тесты на JavaScript, а затем вывести модульные тесты в формате JSON, даже обычный текст подойдет.Затем я хочу иметь общий класс/исполняемый файл C#, который может загружать файл, содержащий JS, запускать модульные тесты JS, удалять/загружать результаты и возвращать информацию о пройденном/неудачном выполнении во время задачи после сборки.

Я думаю, что это возможно, используя старый ActiveX ScriptControl, но кажется, что должен быть .NET-способ сделать это без использования SilverLight, DLR или чего-либо еще, что еще не выпущено.У кого-нибудь есть идеи?

обновлять: Из блога Брэда Абрамса

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

Уточнение:У нас есть модульные тесты для наших функций JavaScript, написанные на JavaScript с использованием платформы JSUnit.Прямо сейчас, во время процесса сборки, нам нужно вручную загрузить веб-страницу и нажать кнопку, чтобы убедиться, что все модульные тесты JavaScript пройдены.Я хотел бы иметь возможность выполнять тесты во время процесса после сборки, когда запускаются наши автоматизированные модульные тесты C#, и сообщать об успехе/неуспехе вместе с модульными тестами C# и использовать их в качестве индикатора того, выполняется ли сборка. сломан.

Это было полезно?

Решение

Вы можете запустить JSUnit изнутри Nant, используя сервер JSUnit, он написан на Java, и нет задачи Nant, но вы можете запустить его из командной строки, результаты записываются в виде XML, и вы можете интегрировать их с отчетом о сборке. процесс.Это не будет частью вашего результата Nunit, а будет дополнительным отчетом.Мы провалим сборку, если какой-либо из этих тестов не пройден.Мы делаем именно это, используя CC.Net.

Другие советы

Код должен быть понятен, поэтому я просто опубликую его.

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


    }

Вы можете использовать движок Microsoft Javascript для оценка кода JavaScript из C#

Обновлять:Это устарело с VS 2008.

Я не знаю какого-либо конкретного способа .NET сделать это прямо сейчас...Ну, еще есть JScript.NET, но он, вероятно, не будет совместим с любым JS, который вам нужно выполнить :)

Очевидно, что будущее — это реализация .NET JScript для DLR, которая скоро появится…когда-нибудь (надеюсь).

Так что, вероятно, останется использовать старый движок ActiveX JScript, что, безусловно, возможно сделать из .NET (я делал это раньше, хотя это немного некрасиво!).

Если вы выполняете код не в контексте браузера, зачем тесты писать на Javascript?Трудно понять более широкую картину того, чего вы здесь пытаетесь достичь.

Может ли быть проще использовать JSUnit написать тесты, а затем использовать ВатиНтестовая оболочка для их запуска через C#, пройдена или нет в зависимости от результатов JSUnit?

Хотя это действительно дополнительный шаг.

Кажется, я где-то читал, что в следующей версии MBUnit или WatiN будет встроена функциональность для обработки тестовых приспособлений JSUnit.Если бы я мог вспомнить, где я это прочитал...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top