2013-03-22 7 views
5

मैं परीक्षण के दौरान स्थानीय एक्सप्रेस सर्वर से पृष्ठ लोड करने के लिए zombie.js का उपयोग कर रहा हूं। दुर्भाग्यवश, एक स्क्रिप्ट तत्व है जो Google Analytics को कॉल करता है। यदि संभव हो तो लोडिंग से अन्य (स्थानीय) स्क्रिप्ट को रोकने के बिना मैं इस बाहरी स्क्रिप्ट (कृपापूर्वक) को अवरुद्ध करना चाहता हूं।zombie.js को केवल बाहरी संसाधनों को लोड करने से रोकें

मुझे पता है कि { runScripts : false }browser.visit() पर कॉल के साथ उपलब्ध है। हालांकि, यह पृष्ठ पर किसी भी और सभी स्क्रिप्ट को लोड करने से इनकार करता है, न केवल अन्य होस्टों पर रहने वाले। क्या यह संभव है?

उत्तर

7

आपको resources ऑब्जेक्ट का उपयोग करना चाहिए।

यदि आप वास्तव में अनुरोध के माध्यम से अनुरोध नहीं करना चाहते हैं तो आप विशिष्ट प्रतिक्रिया देने के लिए कुछ अनुरोध सेट कर सकते हैं। आप निम्न Google Analytics एक खाली दस्तावेज़ देते हैं बनाने के लिए क्या चाहते हैं:

browser.resources.mock('http://google.com/url/to/analytics.js',{}); 

नोट आप सटीक URL है जो नकली करना चाहते हैं प्रदान करने के लिए है, वहाँ इस तरह के एक डोमेन के रूप में एक आंशिक उपहास करने के लिए कोई रास्ता नहीं है नाम।

+0

ऐसा लगता है कि 'resource.mock' विधि ज़ोंबी 4.x में मौजूद नहीं है। Https://github.com/assaf/zombie/blob/master/src/resources.js देखें – Corkscreewe

8

zombie 3.1 के बाद से, browser.resources.mock विधि समाप्त हो गई है।

var nock = require('nock') 

nock('http://www.google-analytics.com') 
    .get('/analytics.js') 
    .times(Math.Infinity) 
    .reply(200, '{}') 

var Browser = require('zombie') 
var browser = new Browser() 
0

हो सकता है कि कुछ इस तरह आप के लिए काम करेंगे: वैकल्पिक nock लाइब्रेरी का उपयोग करने के लिए है? यह सभी संसाधनों के माध्यम से loops और उन लोगों को "aborts" जिन्हें अनदेखा किया जाना चाहिए।

const Fetch = require('zombie/lib/fetch'); 

const ignoredResources = [ 
    'google-analytics.com' 
]; 

browser.pipeline.addHandler((browser, request) => { 
    let doAbort = false; 

    ignoredResources.forEach(domain => { 
    if (request.url.includes(domain)) { 
     doAbort = true; 
    } 
    }); 

    if (doAbort) { 
    return new Fetch.Response('', { status: 200 }); 
    } 
}); 
संबंधित मुद्दे