2015-04-17 4 views
7

- BackgroundMocha: Как протестировать Express rendered views

Я пытаюсь протестировать приложение Express. Для меня это хобби, поэтому я не использовал Express для обслуживания JSON api (как это обычно делается).

- Проблема

вопрос, я не могу понять способ проверить содержание мнения, чтобы убедиться, что страница фактически оказывается на файл представления в самом проекте.

- То, что я Пытался

Например, я не могу проверить простую индексную страницу, так как файл jade начинается с extends layout. Это затрудняет проверку наличия динамического содержимого.

У кого-нибудь есть предложения по проверке того, действительно ли визуализируется представление?

it ('renders the index page', function(done) { 
    var jade = require('jade'); 
    var should = require('should'); 
    var fs = require('fs'); 

    supertest(app) 
    .get('/') 
    .expect(200) 
    .end(function(err, res) { 
     var rawJade = fs.readFileSync('./views/index.jade').toString(); 
     res.text.should.equal(rawJade.convertToHtml()); // jade supports a function like this 
    }); 
)}; 

ответ

1

Существует, как обычно, несколько способов для решения этой проблемы. Прежде чем продолжить, я призываю вас спросить себя, зачем вам это нужно. Подобные тесты чрезвычайно непостоянны. Если вы сделаете небольшое изменение, это заставит вас переписать тесты, которые сейчас терпят неудачу.

То есть, я думаю, самый простой способ начать добавлять тесты, утверждающие собственно рендеринг с https://github.com/cheeriojs/cheerio

Базовый пример будет выглядеть следующим образом:

it ('renders the index page', function(done) { 
 
    var should = require('should'); 
 
    var cheerio = require('cheerio'); 
 

 
    supertest(app) 
 
    .get('/') 
 
    .expect(200) 
 
    .end(function(err, res) { 
 
     err.should.not.be.ok(); 
 
     res.should.be.ok(); 
 
    
 
     var $ = cheerio.load(res.body); 
 
     var header = $('h1:first'); 
 
     header.should.equal('Hello World!'); 
 
    
 
     done(); 
 
    }); 
 
)};

сейчас вы не собираетесь проверять, выглядит ли визуализированное представление точно так, как вы хотите (я имею в виду, что вы могли бы, но это было бы утомительно). Но это также означает, что если вы сделаете небольшие незначительные изменения, все это не рухнет. Вместо этого вы можете сосредоточиться на проверке правильности отображения ключевых аспектов вашего пользовательского интерфейса (например, заголовок страницы есть с правильными свойствами правописания и класса/идентификатора)

Смежные вопросы