2013-11-15 59 views
3

我在本地環境中調用test_file時遇到問題。R:在本地環境中testthat test_file()存在問題

local({ newvar <- 1; expect_equal(newvar, 1); }); 

工作正常。

local({ 
    newvar <- 1; 
    test_that('newvar is equal to 1:', { expect_equal(newvar, 1) }); 
}); 

工作正常。

local({ newvar <- 1; test_file('simple.test.R'); }); 

錯誤:對象 'newvar' 未找到

simple.test.R的內容只不過是:

context('local env test'); 
test_that('local env test', { expect_equal(newvar, 1) }) 

幫助讚賞!謝謝。


編輯:

我試圖做的是閱讀從shinyAce(https://github.com/trestletech/shinyAce)一些代碼,並檢查它是有效的(METS一些規定的要求)。我使用的是'local()',因此在shinyAce塊中定義的任何分配的變量都不會保留在環境中。

回答

2

下面是test_file來源:

function (path, reporter = "summary") 
{ 
    reporter <- find_reporter(reporter) 
    with_reporter(reporter, { 
     sys.source(path, new.env(parent = globalenv()), chdir = TRUE) 
     end_context() 
    }) 
} 

重點線是這樣的:

sys.source(path, new.env(parent = globalenv()), chdir = TRUE) 

文件將在一個新的環境中全球環境下執行,而你的newvar只可在您創作的本地環境中使用。

你的最終目標究竟是什麼?我們可以嘗試幫助。或者你只是好奇?

+0

謝謝。我會更新我的Q,我正在嘗試做什麼。 – hardingnj

+0

因此'newvar'在測試運行中發生變化?在'simple_test.R'中,你可以創建一個函數,它接受'newvar'參數,然後把所有的測試邏輯放在那裏。如果你真的想,你也可以定義自己的'test_file'版本來評估其他環境中的源文件。這些中的一個會起作用嗎? – Peyton

+0

我認爲編寫我自己的test_file版本是最好的解決方案。謝謝你的幫助。 – hardingnj