我已经实现了以下代码来执行 Jasmine Test 的 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 数据...当我执行脚本时,我在异常时遇到以下错误:
Exception = Can't find variable: jasmine
尽管我的脚本在第一行声明了 jasmine
变量。上面的代码还有什么问题????他们还有其他执行 JavaScript 的方式吗??
还有一个问题:JavaScriptCore 框架是否支持 DOM 和 HTML 的其他功能?
最佳答案
对于你的第二个问题,JavaScriptCore 不支持 DOM 和其他 HTML 相关的东西。它是一个实现 ECMA 262(?) 规范的最小引擎。 DOM 支持在作为 WebKit 一部分的 WebCore 中实现。
如果您想进行 headless JavaScript/DOM 测试,请使用 PhantomJS
关于javascript - 如何使用 JavaScriptCore 框架执行 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798956/