문제

C# 어셈블리 내에서 JavaScript 코드를 실행하고 JavaScript 코드 결과를 호출 C# 코드로 반환하고 싶습니다.

내가 하려고 하지 않는 일을 정의하는 것이 더 쉽습니다.

  • 내 코드 뒤에 있는 웹 페이지의 JavaScript 함수를 호출하려고 하는 것이 아닙니다.

  • WebBrowser 컨트롤을 로드하려고 하지 않습니다.

  • 저는 JavaScript가 서버에 대한 AJAX 호출을 수행하도록 하고 싶지 않습니다.

내가 하고 싶은 것은 JavaScript로 단위 테스트를 작성한 다음 단위 테스트에서 JSON을 출력하도록 하는 것입니다. 일반 텍스트라도 괜찮습니다.그런 다음 JS가 포함된 파일을 로드하고, JS 단위 테스트를 실행하고, 결과를 스크랩/로드하고, 빌드 후 작업 중에 세부 정보와 함께 통과/실패를 반환할 수 있는 일반 C# 클래스/실행 파일을 갖고 싶습니다.

이전 ActiveX ScriptControl을 사용하는 것이 가능하다고 생각하지만 SilverLight, DLR 또는 아직 제공되지 않은 다른 항목을 사용하지 않고 이를 수행하려면 .NET 방식이 있어야 할 것 같습니다.누구든지 아이디어가 있나요?

업데이트: 브래드 에이브럼스 블로그에서

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

설명:JSUnit 프레임워크를 사용하여 JavaScript로 작성된 JavaScript 함수에 대한 단위 테스트가 있습니다.지금은 빌드 프로세스 중에 웹 페이지를 수동으로 로드하고 버튼을 클릭하여 모든 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 엔진을 사용할 수 있습니다. C#에서 JavaScript 코드 평가

업데이트:이는 VS 2008부터 더 이상 사용되지 않습니다.

현재 이 작업을 수행하는 .NET 특정 방법을 모르겠습니다...글쎄요, 여전히 JScript.NET이 있지만 아마도 실행해야 하는 JS와 호환되지 않을 것입니다. :)

분명히 미래는 다가올 DLR을 위한 .NET JScript 구현이 될 것입니다...언젠가(희망적으로).

따라서 아마도 이전 ActiveX JScript 엔진을 실행하게 될 것입니다. 이는 확실히 .NET에서 가능합니다(과거에도 해본 적이 있지만 약간 보기 흉한 편입니다!).

브라우저 컨텍스트에서 코드를 실행하지 않는 경우 테스트를 Javascript로 작성해야 하는 이유는 무엇입니까?여기서 달성하려는 작업의 더 큰 그림을 이해하기는 어렵습니다.

좀 더 간단하게 사용할 수 있을까요? JSUnit 테스트를 작성한 다음 와틴JSUnit 결과에 따라 통과 또는 실패하면서 C#을 통해 실행하는 테스트 래퍼가 있습니까?

하지만 실제로는 추가 단계입니다.

MBUnit이나 WatiN의 향후 버전에는 JSUnit 테스트 픽스처를 처리하는 기능이 내장될 것이라는 내용을 어디선가 읽은 것 같습니다.내가 그걸 어디서 읽었는지 기억할 수만 있다면...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top