These functions test whether multiple conditions coexist.

expect_cond(cond1, cond2, data = get_testdata())

  miss = getOption("testdat.miss"),
  missing_valid = FALSE,
  data = get_testdata()



<data-masking> First condition (antecedent) for consistency check.


<data-masking> Second condition (consequent) for consistency check.


A data frame to test. The global test data is used by default.


An unquoted column name to test.


<data-masking> The condition that determines which records should be non-missing.


A vector of values to be treated as missing. The testdat.miss option is used by default.


Should missing values be treated as valid for records meeting the base condition? This allows 'one way' base checks. This is FALSE by default.


expect_*() functions are mainly called for their side effects. The expectation signals its result (e.g. "success", "failure"), which is logged by the current test reporter. In a non-testing context the expectation will raise an error with class expectation_failure if it fails.


  • expect_cond: Checks the coexistence of two conditions. It can be read as "if cond1 then cond2".

  • expect_base: A special case that checks missing data against a specified condition. It can be read as "if base then var not missing, if not base then var missing".


my_survey <- data.frame(
  resp_id = 1:5,
  q1a = c(0, 1, 0, 1, 0),
  q1b = c(NA, NA, NA, 1, 0), # Asked if q1a %in% 1
  q2a = c(90, 80, 60, 40, 90),
  q2b = c("", "", NA, "Some reason for low rating", "") # Asked if q2a < 50

# Check that q1b has a value if and only if q1a %in% 1
try(expect_base(q1b, q1a %in% 1, data = my_survey)) # Fails for resp_id 2 and 5
#> Error : `my_survey` has a base mismatch in variable `q1b`.
#> 1 cases have `q1a %in% 1` but `q1b` is missing.
#> 1 cases do not have `q1a %in% 1` but `q1b` is non missing.

# Check that q2b has a value if and only if q2a < 50
expect_base(q2b, q2a < 50, data = my_survey)

# Check that if q1a %in% 0 then q2a > 50 (but not vice-versa)
expect_cond(q1a %in% 0, q2a > 50, data = my_survey)