4

Мы разрабатываем плагин для рельсов, и у меня есть огурец, прекрасно работающий с Capybara. НО, при разработке, я (ошибочно, я полагаю) помещал файлы Javascript в общедоступный/javascript-каталог родительского тестового приложения. Поэтому, когда Capybara работает, он не находит файл javascript. Как мы можем получить Cucumber/Capybara, чтобы увидеть эти JS-файлы?Как получить Capybara, чтобы увидеть Javascript в каталоге плагинов при создании плагинов?

Чуть более подробно:

Так макет «reports.html.haml» относится к «SRC ="/JavaScripts/...», но когда я запускаю огурец внутри поставщика/плагинов/репортер каталог, Capybara не находит файлы JS (я думаю). Так что я должен запускать огурец из корня приложения, включая файлы плагина, или есть другое место, в которое мне нужно включить файлы JS (например, где-то в иерархии поставщика/плагина/репортера)?

Вот наш текущий макет каталога PLUGIN:

|~app/ 
| |~controllers/ 
| | `-reports_controller.rb 
| |~models/ 
| | `-report.rb 
| `~views/ 
| |~layouts/ 
| | `-reports.html.haml 
| `~reports/ 
|  |-edit.html.haml 
|  |-index.html.haml 
|  |-new.html.haml 
|  |-show.html.haml 
|  `-show.js.erb 
|+autotest/ 
|+config/ 
|~features/ 
| |+step_definitions/ 
| |+support/ 
| `-reports.feature 
|+generators/ 
|+lib/ 
|+spec/ 
|... 
+0

Капибары не нужно видеть JavaScript-файлы, вы должны включить их в ваших взглядах? –

+0

Правильно, поэтому макет «reports.html.haml» относится к «/ javascripts/...», но когда я запускаю огурец из каталога vendor/plugins/reporter, Capybara не находит файлы JS (я думаю) , Так что я должен запускать огурец из корня приложения, включая файлы плагина, или есть другое место, в которое мне нужно включить файлы JS (например, где-то в иерархии поставщика/плагина/репортера)? – btelles

ответ

0

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

Для того, чтобы Капибара увидела результаты Javascript, вам нужно будет использовать один из драйверов, поддерживающих Javascript, - по умолчанию он просто запускает Rack и синтезирует запросы на нем. У меня был большой успех с Selenium, но env.js должен быть быстрее, если он совместим, так как ему не нужно обманывать реальный браузер. Имейте в виду, что как только вам понадобится плагин совместимости с браузером (jQuery, Prototype, Mootools и т. Д.), Env.js будет barf.

Если вы делаете много Javascript в своем плагине, я настоятельно рекомендую Jasmine - он предназначен для работы как RSpec, но в Javascript и для тестирования фактического JS-кода очень быстро, как приятно.

+0

Спасибо Джадсон. Я знаю Жасмин. И я знаю об использовании различных драйверов, которые поддерживают поддержку javascript. К сожалению, проблема остается в том, что даже если вы пытаетесь использовать их, я все равно не могу загрузить javascript на тест огурца для плагина (как следует из вопроса).Если у вас есть идеи, как я могу это сделать, пожалуйста, дайте мне знать (я бы не хотел, чтобы 150pts пропадали даром). – btelles

+2

Мой опыт тестирования плагинов заключается в том, что вам приходится тестировать их в контексте реального приложения - по крайней мере, некоторые функции потребуют полного приложения, а не только плагина. Итак: можете ли вы проверить JS в родительском приложении? Если плагин предназначен для Rails3, у вас есть возможность создать его как приложение и включить его в качестве двигателя. – Judson

0

Я использую огурец и каппибару без каких-либо проблем с javascripts.

Не могли бы вы разместить соответствующую трассировку стека и связанные с ней ошибки, чтобы узнать, что происходит?

(бы оставил комментарий, но, увы, я пока не могу)

+0

Хммм ... У меня на самом деле нет трассировки стека. Проблема в том, что у page.body нет дополнительного элемента, который вставляет JavaScript. Итак, тест на огурцы просто говорит «нет, этот элемент не существует». Кроме того, имейте в виду, что я тестирую Rails PLUGIN, а не обычное приложение Rails, и проблема в том, что я думаю, что Capybara не знает, где найти файлы JavaScript. – btelles

2

Это похоже на то, что вам нужно, чтобы построить свой плагин как двигатель Rails, так что вы можете поместить JavaScripts в плагине, но все-таки сделать их доступными из родительского приложения.

Это взято из плагина, который я строю с аналогичными требованиями. Чтобы включить JavaScripts вы бы использовать что-то вроде javascript_include_tag 'my-plugin/javascripts/foo.js', предполагая, что файл существует в [plugin_path]/public/javascripts/foo.js

module MyPlugin 
    class Engine < Rails::Engine 
    config.mount_at = '/my-plugin/' 

    initializer "static assets" do |app| 
     app.middleware.use ::ActionDispatch::Static, "#{root}/public" 
    end 
    end 
end 
+0

Вы также захотите потребовать файл, содержащий этот движок, когда ваш Gem загружен. –