2012-01-10 14 views
1

Jasmine TestフレームワークのJavaScriptファイルを実行するために、次のコードを実装しました。JavaScriptCoreフレームワークでJavaScriptを実行するには?

NSMutableArray * fArr = [[NSBundle mainBundle] pathsForResourcesOfType:@"js" inDirectory:@"scripts/JS_TestFramework/lib/jasmine-1.1.0"]; 
NSMutableString *fullFrameworkScript = nil; 
    NSString *script; 

    for (int i = fArr.count-1; i >= 0; i--) 
    { 
     NSMutableString* filePath = [fArr objectAtIndex:i]; 

     fullFrameworkScript = [NSMutableString string]; 

     NSError* error; 

     script = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; 

     if(script) 
     { 
      [fullFrameworkScript appendString:script]; 
     } 
    } 
    JSValueRef result; 
if(fullFrameworkScript) 
    { 
     JSStringRef scriptJS = JSStringCreateWithCFString(fullFrameworkScript); 

     JSValueRef exception = NULL; 

     result = JSEvaluateScript(context, scriptJS, NULL, NULL, 1, &exception); 

     if(exception) 
     { 
      [self logException:exception]; 
      exception = NULL; 
     } 

     JSStringRelease(scriptJS); 
    } 

JSStringRef step1 = JSStringCreateWithCFString(@"jasmine.getEnv().addReporter(new jasmine.TrivialReporter())"); 

JSValueRef exception = NULL; 

    JSObjectRef fn   = JSObjectMakeFunction(context, step1, 0, NULL, JSStringCreateWithCFString(script), NULL, 0, NULL); 
    result  = JSObjectCallAsFunction(context, fn, NULL, 0, NULL, &exception); 

    if(exception) 
    { 
     [self logException:exception]; 
     exception = NULL; 
    } 

    JSStringRelease(step1); 

    [MTPScriptExecutionContext removeAllObjects]; 

    JSStringRef htmlResult = JSValueToStringCopy(context, result, NULL); 

    NSString *htmlData = [NSMakeCollectable(JSStringCopyCFString(kCFAllocatorDefault, htmlResult)) autorelease]; 

    JSStringRelease(htmlResult); 

    return htmlData; 

これは、HTMLデータを返す...私は例外で、次のエラー取得していたスクリプトを実行していたとき、私の関数である:私のスクリプトは、最初の行でjasmine変数を宣言したが

Exception = Can't find variable: jasmine 

を。上記のコードで他に何が問題になるか? JavaScriptを実行する他の方法はありますか?

もう1つ質問:JavaScriptCoreフレームワークは、DOMやその他のHTML機能をサポートしていますか?

答えて

2

2番目の質問では、JavaScriptCoreはDOMやその他のHTML関連のものをサポートしていません。 ECMA 262(?)仕様を実装する最小限のエンジンです。 DOMサポートは、WebKitの一部であるWebCoreに実装されています。

PhantomJSで行くあなたは、ヘッドレスのJavaScript/DOMは

+0

PhantomJS岩をテスト行いたい場合。 –

+0

+1:ありがとう.... – DShah

関連する問題