2014-07-15 17 views
5

का उपयोग करते समय मैं संदेश() से आउटपुट कैसे देख सकता हूं, मैं आर में उत्कृष्ट टेस्टथैट पैकेज का उपयोग कर रहा हूं। मेरा मुद्दा यह है कि मैं कोड में संदेश() फ़ंक्शन से कोई आउटपुट नहीं देख सकता test_file का उपयोग करते समय परीक्षण किया गया। उदाहरण के लिए, मैं test_message.Rआर testthat पैकेज: test_file()

नामक एक फ़ाइल में कोड निम्नलिखित है का कहना है कि इस प्रकार और नीचे

> test_file("test_message.R") 
Cat: Hello world 
. 

तो मैं संदेश से पाठ नहीं दिखाई दे रहा आउटपुट प्राप्त

f <- function() { 
    message ("Message: Hello world") 
    cat ("Cat: Hello world\n") 
    return (1) 
} 

test_that ("message shows up", { 
    expect_equal(f(), 1) 
}) 

मैं test_file चलाने() ।

हालांकि, जब मैं अपने आप ही कोड को चलाने मैं इसे देख पा रहे हैं:

> f() 
Message: Hello world 
Cat: Hello world 
[1] 1 

मुझे पता है कि डिफ़ॉल्ट रूप से, संदेश() stderr करने के लिए लिखते हैं और बिल्ली stdout में लिखते हैं और मुझे लगता है कि test_file अनुमान लगा रहा हूँ चेतावनियों और त्रुटियों में पाठ के लिए परीक्षण करने के लिए "interceptpts" stderr। क्या कोई तरीका है कि मैं चीजों को कॉन्फ़िगर कर सकता हूं ताकि मुझे कंसोल पर संदेश() टेक्स्ट दिखाई दे?

+0

क्या मैं पूछ सकता हूं कि आप परीक्षण चलाने के दौरान संदेश का आउटपुट क्यों देखना चाहते हैं? – Dason

+0

मैंने कोड की प्रगति लॉग करने के लिए पहले स्थान पर संदेश() को कॉल किया है। परीक्षणों को चलाने के दौरान मैं उन संदेशों को देखना चाहता हूं, यह जानने के लिए कि कोड विफल होने तक हमें कितना दूर मिला, और यह देखने के लिए कि संदेश स्वयं ठीक से काम कर रहे हैं। ऐसा लगता है कि मुझे इस – user2793761

उत्तर

3

आप यह नहीं कर सकते हैं, कम से कम testthat के स्रोत कोड को संशोधित किए बिना। यह वह हिस्सा है जो परीक्षण का कोड चलाता है: https://github.com/hadley/testthat/blob/0af22cfc7c7f6b13b02537f0d37d96d72d8a98b7/R/test-that.r#L65 यदि आप test_code फ़ंक्शन से suppressMessages हटाते हैं, तो संदेश प्रदर्शित किए जाएंगे।

बीटीडब्ल्यू। testthat मानक आउटपुट या त्रुटि AFAIK को कैप्चर नहीं करता है, इसलिए यदि आप cat या किसी अन्य तरीके से इसका उपयोग करते हैं, तो यह भी प्रदर्शित होगा।

7

यह एसओ को मेरा उद्घाटन पद है, जिस भाषा में मैंने दो हफ्ते पहले सीखना शुरू किया था, इसलिए नम्र रहें।

test_that ("message shows up", { 
    expect_message(f(), "^Message: Hello world\\n") 
}) 

इसके अलावा, testthat.pdf के पेज 23 पर shows_message & expect_message के लिए दस्तावेज़ देखें (भविष्य में संदर्भ के लिए:: प्रकाशित 2014-02-22 00

मैं निम्नलिखित लगता है कि आप के लिए क्या देख रहे हैं: V0.8.1 के लिए 25:04)।

और https://stackoverflow.com/a/24476491/3811916 के लिए जीएसई को पूर्ण क्रेडिट जो इस मुद्दे के बाद परीक्षण करने के लिए चालू होने के बाद दूसरी पोस्ट है।

मैंने अभी evaluate_promise (ऊपर से जुड़े पीडीएफ में भी) की खोज की है। तो यहां एक विकल्प है जो संदेश के लिए परीक्षण करेगा और आउटपुट प्रिंट करेगा:

test_that ("message shows up", { 
    result <- evaluate_promise(f(), print = TRUE) 
    expect_that(result$message, equals("Message: Hello world\n")) 
    print(result$output) 
}) 
+1

धन्यवाद के लिए एक और तंत्र का उपयोग करने की आवश्यकता होगी। यह संदेश के लिए परीक्षण करने के लिए एकदम सही है जिसे मैं ढूंढ रहा हूं। समस्या यह है कि मैं वास्तव में संदेश प्रिंटिंग देखना चाहता था क्योंकि वे दौड़ते समय, केवल परीक्षण नहीं करते थे। मैं इस क्षमता के बिना जी सकता हूं और या तो संदेशों के परीक्षण के लिए अपने सुझाव का उपयोग कर सकता हूं या सिर्फ गैर-परीक्षण वातावरण में संदेशों का निरीक्षण कर सकता हूं। – user2793761

+0

@ user2793761 ने एक विकल्प जोड़ा जो 'मूल्यांकन_प्रोमाइज 'का उपयोग करता है जो संतुष्ट हो सकता है। – eddies

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