2011-02-18 5 views
6

मैं अभी ककड़ी और रेल के साथ विचारों का परीक्षण कर रहा हूं और वास्तव में अनुभव का आनंद लेता हूं। मैं आसानी से कह सकते हैं:क्या टेस्ट (यूनिट/एकीकरण) का कोई तरीका है कि सीएसएस को अपेक्षित एचटीएमएल तत्वों पर लागू किया गया है?

Background: 
    Given I am logged in as a customer 
Scenario: View the Welcome Page 
    When I go to the home page 
    Then I should be on the "Welcome" page 
    And I should see the following in the sidebar: 
    | selector     | text    | 
    | h3      | Search    | 
    | .home-page    | Home    | 
    | .about-page    | About    | 

अब मैं सोच रहा हूँ, मैं कैसे एक कदम आगे जाना है और कह सकते हैं:

And I should see the following colors on the "Welcome" page: 
    | selector     | background   | 
    | #content     | white    | 
    | #sidebar     | grey    | 
    | #navigation    | blue    | 

मुझे लगता है कि मैंने देखा है कि यह की तरह कुछ के साथ ऐसा करना संभव है Node.js या अन्य सर्वरसाइड जावास्क्रिप्ट, क्योंकि यह सभी ब्राउज़र निर्भर है। क्या ऐसा करने का कोई तरीका है, शायद सेलेनियम के साथ सिर्फ सफारी और फ़ायरफ़ॉक्स में?

मैं केवल मुख्य रूप से रंगों और फोंट के लिए परीक्षण करना चाहता हूं, क्रॉस ब्राउज़र पागलपन के लेआउट बी/सी के लिए आवश्यक नहीं है। मैं ये कैसे करूं? Cucumber के साथ शायद थोड़ा Jasmine?

धन्यवाद!

सेटअप:: ककड़ी, Capybara @idlefingers को

अद्यतन

धन्यवाद, यहाँ कुछ है कि काम करता है।

सुविधाओं/support/env.rb:

Capybara.javascript_driver = :selenium 

* सुविधाओं/step_definitions/css_steps.rb: *

Then /^I should see the color "([^"]+)" on the ([^"]+)$/ do |color, selector| 
    element_color = page.evaluate_script('$("##{selector}").css("border-left-color");') # "rgb(221, 221, 221)" 
    assert_equal color, some_color_conversion_method(element_color) 
end 

सुविधाओं/some.feature:

And I should see the color "red" on the sidebar 

यदि कोई बेहतर तरीका है, तो मुझे प्यार होगा जानना!

उत्तर

1

मैं समझ सकता क्यों आप जाँच करना चाहते हो सकता है कि सही आईडी या कक्षा को एक तत्व पर लागू किया गया है, लेकिन मैं नहीं देख सकता कि आप इसे सीधे सीएसएस क्यों देखना चाहते हैं? वह इतना भंगुर हो जाएगा - बस रंग की छाया बदलना आपके परीक्षण तोड़ देगा!

इसके अलावा, मुझे लगता है कि आप ककड़ी की मुख्य शक्ति - परीक्षण व्यवहार, कार्यान्वयन नहीं कर रहे हैं। आपको this का पठन होना चाहिए - यह कुछ अच्छे बिंदु बनाता है जो वर्तमान में आप जिस तरीके से परीक्षण कर रहे हैं उससे संबंधित हैं।

अपने वास्तविक प्रश्न के उत्तर में, यदि आप वास्तव में ऐसा करना चाहते हैं, तो एकमात्र तरीका मैं सोच सकता हूं कि मूल्यों का परीक्षण करने के लिए पृष्ठ पर जावास्क्रिप्ट निष्पादित करना है। यह सेलेनियम में किया जा सकता है (get eval के साथ)। जब तक जेएस ड्राइवर काम कर रहा है तब तक वही चीज़ कैपिबरा के माध्यम से हासिल की जा सकती है।

+0

महान पढ़ा! मैं यह जांचने जा रहा हूं कि उस लेख को जो भी कह रहा था, उसे निकालें और कार्यान्वित करें। धन्यवाद। –

0

आप Webrat (जो Nokogiri उपयोग करता है) इस्तेमाल कर सकते हैं एचटीएमएल शरीर प्रतिक्रिया परीक्षण करने के लिए: http://cheat.errtheblog.com/s/webrat/

तो फिर तुम कर सकते हैं:

assert_have_selector "#content.white" 
+0

इसके लिए मुझे उन तत्वों को प्रतिपादन-विशिष्ट कक्षाएं जोड़ने की आवश्यकता होगी जिन्हें मैं टालना चाहूंगा। गणना सीएसएस मूल्यों की जांच करने के लिए एक पूर्ण रास्ते की तलाश में। –

+0

मैं आपको प्राप्त करता हूं - मैंने सोचा था कि आप कक्षा के रूप में उपयोग कर रहे थे ... शुभकामनाएं! – stef

2

कभी-कभी आवश्यकता यह है कि एक तत्व एक निश्चित रंग है। जैस्मीन जैसे टूल्स के साथ इसका परीक्षण करना संभव है, लेकिन चूंकि आप अंतिम डिस्प्ले को मान्य करना चाहते हैं, सही है, ब्राउज़र-आधारित एकीकरण परीक्षण सही टूल है।(जैस्मीन में काम करने के लिए, आपको थोड़ा और अधिक काम करना होगा और कम वैध परीक्षण के साथ समाप्त करना होगा ... वैसे भी ...)

मैंने एक प्रश्न पूछने में सक्षम होने के लिए simple jQuery plugin called Color Spy लिखा इसके रंगों के बारे में तत्व। आप पूछ सकते हैं:

$(...).backgroundColor() 
$(...).colorColor() 

प्लगइन डोम रंग की गणना अप traipses।

  1. यकीन है कि प्लगइन उपलब्ध है:

    यह एक सेलेनियम परीक्षण के संदर्भ में काम करने के लिए पाने के लिए आपको करना होगा। आप इसे अपने पृष्ठ में शामिल कर सकते हैं, या गतिशील रूप से इसे खींचने के कई तरीके हैं।

  2. element_color(selector) परीक्षण सहायक फ़ंक्शन लिखें। कुछ गतिशील रूप से कुछ जावास्क्रिप्ट निष्पादित करने के लिए इसे पूरे get_eval शेनानिगन्स का उपयोग करने की आवश्यकता होगी।
  3. सामान्य के रूप में assert_equal का उपयोग करें। (मेरे रंगों के "दृश्य निकटता" पर जोर देने के लिए मेरे jsutils repo में कुछ जावास्क्रिप्ट फ़ंक्शन भी है - लेकिन यह एक अलग सवाल है।)

आशा है कि इससे मदद मिलती है।

संबंधित मुद्दे

 संबंधित मुद्दे