2013-12-09 3 views
2

Я бы хотел сделать несколько BDD, используя Mocha и PhantomJS только.
Определите несколько функциональных путей и испытайте их.Run mocha from phantomjs

Короче говоря, я хотел бы, чтобы запустить команду phantomjs test.js в то время как test.js содержит что-то вроде этого:

var mocha = require("mocha"); // This one fails with "ReferenceError: Can't find variable: process"..... "/node_modules/mocha/index.js:2" 

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

describe('Empty', function(){ // Obviously this one fails too with "ReferenceError: Can't find variable: describe" 
    describe('tests are', function(){ 
    it('very nice', function(done){ 
     page.open("http://www.phantomjs.org/", function (status) { 
      console.log('Loading a web page'); 
      console.log("Page is loaded"); 
      phantom.exit(); // Or, just call `done()`, doesn't matter right now 
     }); 
    }) 
    }) 
}) 

Вы можете распознать код куски двух?

Как это сделать? Я читал на какой-то странице, что мог require() «mocha.js» версии браузера, но, похоже, он не работает очень хорошо.

------------------ Подробнее -------------------------- ----------

Я пробовал CasperJS, но помимо предоставления действительно приятного материала, я пропустил привлекательный тестовый дизайн Mocha (на стороне сервера).

Все примеры, которые я видел, объясняют, как запускать тесты Mocha на веб-странице (на стороне браузера) (с тегом скрипта), а не на тестовом сценарии NodeJS.
Мне это не нравится, я хочу сохранить тестовую чистую консоль, в дополнение к тому, что этот подход побуждает меня добавлять тестовый код на мои веб-страницы.

Я видел несколько проектов, пытаясь облегчить этот подход, но я не доволен этим - похоже, они выполнили 95% требования, привлекая Mocha и PhantomJS, но последние 5% отменить, материал, который действительно соединяет его вместе.

+0

Нашел этот удивительный проект (https://github.com/alexscheelmeyer/node-phantom), но неясно, как дела обстоят там .. Мне нравится идея удаленного управления PhantomJS .. Не уверен, что я должен использовать его , поскольку он кажется небольшим проектом с ограниченной (будущей) поддержкой .. – Poni

+0

Что-то примечание заключается в том, что PhantomJS является безгласным браузером веб-браузера (V8 runtime), а Mocha предназначен для работы во время выполнения узла. Требование Mocha терпит неудачу, потому что 'process' - это то, что Node предоставляет сценарии (недоступен в браузерах). –

ответ

3

Возможно, вы захотите запустить тесты еще в контексте Node (node test.js), но управляя phantomJS с узла с чем-то вроде библиотеки node-phantom.

Что-то TJ Holowaychuk делает во всех своих библиотеках, это process.env.COV check (что я лично не понимаю), но вполне вероятно, что PhantomJS не будет поддерживать переменную процесса.

Возможно, вы сможете обмануть Мокку, установив window.process и window.process.env на пустые объекты, хотя я предполагаю, что позже вы столкнетесь с дополнительными проблемами PhantomJS/Node.

+1

process.env.COV только он использует переменную окружения для переключения между кодом и инструментальным кодом для кода COVerage (возможно, используя свой собственный инструмент jscoverage). – iandotkelly

+0

Эта «фантомная» библиотека кажется тем, что я ищу, проверит ее, как только я смогу ее скомпилировать: ~ (Windows) .. Вернется с ответом/с! Спасибо – Poni

+1

Хорошо, теперь кажется, что есть два варианта, которые работают: 'phantom' и' node-phantom'. Это точные имена NPM, для будущих ссылок для других. Спасибо, Майкл! :) – Poni

0

Выполнение phantomjs через мост от узла может быть не лучшим вариантом.

Модуль phantomjs-nodeify (I forked from http://github.com/jgonera), который делает среду phantomjs более похожей на среду узлов - она ​​добавляет процессам модулей, событиям и т. Д. К phantomjs.

Существует webspecter рамки, которые достигли именно этого, со старыми phantomjs и старыми мокками.

Кажется возможным выполнить тесты мокко в фантомном 2.0.