2013-08-12 2 views
5

테스트를 위해 laika를 사용하고 라우팅을 위해 meteor-router 패키지를 사용하고 있습니다. 일부 페이지를 탐색하고, 양식을 채우고, 제출하고, 성공 메시지를 확인하는 테스트를하고 싶습니다. 그러나 탐색 영역에 걸렸습니다. 이것은 내 첫 번째 시도였다laika로 Meteor 라우터 또는 Iron 라우터를 테스트하는 방법

var assert = require('assert'); 

suite('Router', function() { 
    test('navigate', function(done, server, client) { 
    client.eval(function() { 
     Meteor.Router.to('test'); 
     var title = $('h1').text(); 
     emit('title', title);   
    }) 
    .once('title', function(title) { 
     assert.equal(title, 'Test'); 
     done(); 
    }); 
    }); 
}); 

Meteor.Router.to 콜백이없는 나는 새 페이지가로드 될 때 다음 줄을 실행하는 방법을 모르기 때문에이 작동하지 않습니다.

나는이

var page = require('webpage').create(); 

page.open('http://localhost:3000/test', function() { 
    ... 
} 

같은과도 시도했지만 나는

내가 iron router로 이동하고있어 편집 오류 Error: Cannot find module 'webpage'

을 가지고, 그래서 그 어떤 대답도 할 것이다 도움이됩니다.

+1

FYI : 방금 시작한 사람이라면 널리 사용되는 유티 마지막 라우터 2 개를 만든 https://github.com/EventedMind/meteor-iron-router로 전환 할 수 있습니다. –

답변

0

나는 동일한 문제가있었습니다. 테스트를 실행하기 전에 일부 페이지로 이동해야했습니다. 나는 철제 라우터도 사용하고 있습니다. 나는 당신이 단지 Router.go('foo')을 실행할 수 없다는 것을 알았고 그게 전부입니다. 실제 라우팅이 발생할 때까지 기다려야합니다. 다행히도 라우터는 페이지가 준비되는 즉시 변경 될 수있는 반응 형 데이터 소스 인 Router.current() 메소드를 공개합니다. 그래서, 내 테스트를 실행하기 전에 특정 경로를 탐색하기 위해, 내가 먼저 다음과 같은 코드 블록을 실행

// route to /some/path 
client.evalSync(function() { 
    // react on route change 
    Deps.autorun(function() { 
     if (Router.current().path == '/some/path') { 
      emit('return'); 
      this.stop(); 
     } 
    }); 
    Router.go('/some/path'); 
}); 

를이 라우팅가 완료되면이 블록이 실행됩니다 따르는 evalSync() 모든 것을 내이기 때문에.
희망이 도움이됩니다.

0

Laika에는 특정 DOM 요소가 표시 될 때까지 기다릴 수 있도록 설정할 수있는 waitForDOM() 함수가 포함되어 있습니다.이 경우에는로드중인 페이지의 요소가됩니다.

client.eval(function() { 
    Router.go('test'); 
    waitForDOM('h1', function() { 
     var title = $('h1').text(); 
     emit('title', title); 
    }); 
}); 

첫 번째 매개 변수는 jQuery 선택기입니다.

관련 문제