2013-03-16 2 views
3

Express.js 2.5.8을 사용 중입니다. 중복을 줄이기 위해 dynamicHelper를 사용하여 일반적으로 사용되는 객체를 각 라우트 내부에 명시 적으로 렌더링하지 않고 뷰에 전달하려고합니다.Express 응답 지역에 대한 테스트

나는보기에가는 도중에 현지인을 가로채는 방법에 대해 근원을 보았지만 많은 성공을 거두지 못했다. app.dynamicViewHelpers 객체를 확인하여 잠재적으로 그 존재를 확인할 수 있습니다. 그러나이를 달성하기 위해 구현에 의존하는 방법이 적은지 알고 싶습니다.

이상적인 솔루션은 값과 개체가보기로 전달되는 방식에 대해 불가지론입니다. 뷰 헬퍼, 미들웨어 또는 경로 자체에서 온 것이 든 테스트는 수정없이 통과해야합니다. 그것은 어쨌든 이상적입니다. 나는 다른 접근 방식으로 정착 할 것이다.

내가 시험을 찾고있는 무슨의 느슨한 예

는 :

app.dynamicHelpers({ 
    example : function(req, res){ 
    return "Example Value"; 
    } 
}); 

app.get('/example', function(req, res){ 
    res.render('example-view', { 
    sample : "Sample Value" 
    }); 
}); 

// test that example === "Example Value" in the view 
// test that sample === "Sample Value" in the view 
+1

당신이 뭘 하려는지에 대한 작은 예를 들어 시나리오를 제공 할 수 ? 추가 데이터가 포함 된 템플릿 플러그인을 마무리 짓기 위해 뭔가 쓸 수없는 이유가 없습니다. – Brad

+0

@ 브래드 나는 당신이 무엇을 제안하고 있는지 불확실합니다. 이것이 시험의 일부 또는 생산 코드의 일부입니까? – jneander

+0

이제 알겠습니다. 어떻게 든 내 첫 번째 질문에, 나는 완전히 "테스트"부분을 놓쳤다. – Brad

답변

0

이 정말 좋은 질문이다. 이 작업을 수행하는 가장 좋은 방법은 Express의 뷰 시스템을 활용하는 것입니다. 당신이 익스프레스 2를 사용하는 경우, 그것은처럼 보일 수있는 다음 : 익스프레스 3에서

var express = require('express'); 
var app = express.createServer(); 

express.view.compile = function (view, cache, cid, options) { 
    // This is where you get the options as passed to the view 
    console.log(options); 

    return { 
    fn: function() {} 
    }; 
}; 

app.locals({ 
    passed_via_locals: 'value' 
}); 

app.get('/', function (req, res, next) { 
    res.render('index', { 
    passed_in_render: 'value', 
    layout: false 
    }); 
}); 

app.listen('./socket'); 

var http = require('http'); 

http.get({socketPath: './socket'}); 

는이 훨씬 쉬워집니다 :

var express = require('express'); 
var app = new express(); 

function View() { 
    this.path = true; 
}; 
View.prototype.render = function(options, cb) { 
    // This is where you get the options as passed to the view 
    console.log(options); 
}; 
app.set('view', View); 

app.locals({ 
    passed_via_locals: 'value' 
}); 

app.render('index', { 
    passed_in_render: 'value' 
}); 
관련 문제