2016-01-09 28 views
5

Testthat/devtools altyapısını kullanırken bir R paketinin test dizinindeki tüm testleri atlamanın doğru yolu nedir? Örneğin, bir veritabanına bağlantı yoksa ve tüm sınamalar bu bağlantıya dayanıyorsa, tüm dosyalara tek tek skip yazmalı mıyım yoksa tek bir skip yazabilir miyim? Koşul karşılanmadığında tüm test testlerini atla

Ben görünen bir standart paket kurulum var

mypackage/gibi

  • ... # diğer paket şeyler
  • test/
    • testthat.R
    • testthat/
      • test thing1.R
      • test thing2.R İlk başta

ben

## in testthat.R 
library(testthat) 
library(mypackage) 

fail_test <- function() FALSE 
if (fail_test()) test_check("package") 
gibi testthat.R dosyada bir test koymak düşündüm

Ancak, bu işe yaramadı ve devtools::test() çağrı sadece bu dosyayı yok sayıyor gibi görünüyor. Sanırım bütün testleri başka bir dizinde saklamak bir alternatif olurdu, ama daha iyi bir çözüm var mı?

+0

Bu örnekte, 'if (fail_test()) '... – Thomas

cevap

0

Belki bir üst klasör testinde koşullu dizin içerme koyarak, alt dizinlerinde testler düzenleyebilir:

pakette testthat yılında 'testleri' düşünün. Özellikle , bu bir ilginç görünüyor:

içerir
  • test-test_dir.r'test_dir' alt dizin burada testi tarama alt dizinleri recurses şey görmüyorum

:

1

R Paketleri kitabındaki Skipping a test bölümü bu kullanım durumunu kapsar. Esasen, veritabanına bağlanıp bağlanamayacağınızı kontrol edip etmemeniz gerekip gerekmediğini kontrol eden özel bir işlev yazıyorsunuz ve bu koşulu yerine getirmeniz gereken tüm testlerden bu işlevi çağırıyorsunuz.

Örnek, kitaptan papağan gibi: Yaptığım ve olmayan testin bir karışımına sahip olma eğilimi beri bütün testleri açıp kapatmak için tek anahtar daha yararlı bu yaklaşımı buldum

skip_if_no_db <- function() { 
    if (db_conn()) { 
    skip("API not available") 
    } 
} 

test_that("foo api returns bar when given baz", { 
    skip_if_no_db() 
    ... 
}) 

kontrol ettiğim koşullara güvenmek ve her zaman mümkün olduğunca çok test yapmak istiyorum.