2013-03-22 4 views
5

테스트 중에 zombie.js를 사용하여 로컬 고속 서버에서 페이지를로드합니다. 유감스럽게도 Google 애널리틱스로 전화를 걸 수있는 스크립트 요소가 있습니다. 가능한 경우 다른 (로컬) 스크립트로드를 막지 않고이 외부 스크립트 (정상적으로)를 차단하고 싶습니다.zombie.js가 외부 리소스 만로드하는 것을 방지합니다.

나는 이 browser.visit()을 호출 할 수 있음을 알고 있습니다. 그러나 다른 호스트에있는 스크립트뿐만 아니라 모든 스크립트를 페이지에로드하는 것을 거부합니다. 이것이 가능한가?

답변

7

resources 개체를 사용해야합니다.

요청을 실제로 처리하지 않으려면 특정 요청을 설정하여 특정 응답을 제공 할 수 있습니다. 당신은 Google 웹 로그 분석 빈 문서를 반환하게하려면 다음을 수행 것 : 당신은 당신이 조롱 할 정확한 URL을 제공해야

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

주를 같은 도메인으로 부분 URL을 조롱 할 수있는 방법이 없습니다 이름.

+0

'resources.mock' 메소드는 더 이상 zombie 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 라이브러리를 사용하는 것입니다? 모든 리소스를 반복하고 무시해야하는 리소스를 "중단"합니다.

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 }); 
    } 
}); 
관련 문제