2017-01-01 18 views
1

Я пишу некоторые математики expect.js, и я бы хотел протестировать самих помощников. Поэтому я хочу написать положительные и отрицательные тесты. Допустим, я написалТестирование расширения на expect.js

toContainItem(name); 

используется как этот;

expect(femaleNames).toContainItem('Brad'); // test fails 
expect(femaleNames).toContainItem('Angelina'); // test passes 

Что я хочу сделать, это написать тест на отрицательный случай, например;

it('should fail if the item is not in the list', function() { 
    expect(function() { 
     expect(femaleNames).toContainItem('Brad'); 
    }).toFailTest('Could not find "Brad" in the array'); 
}); 

Я не знаю, как запустить мой неисправного тестовый код в среде, где он не провалить содержащий тест. Это возможно?


EDIT: На основании ответа Карл Дэвид Мэнэстер, я придумал с расширением ожидать, что позволяет выше код для работы;

expect.extend({ 
    toFailTest(msg) { 
     let failed = false; 
     let actualMessage = ""; 
     try 
     { 
      this.actual(); 
     } 
     catch(ex) 
     { 
      actualMessage = ex.message; 
      failed = true; 
     } 

     expect.assert(failed, 'function should have failed exception'); 

     if(msg) { 
      expect.assert(actualMessage === msg, `failed test: expected "${msg}" but was "${actualMessage}"`); 
     } 
    } 
}); 

ответ

1

Я думаю, вы могли бы обернуть внутренние ожидать в Try/поймать блок, где вы очистить переменный отказ в предложении поймать, а затем сделать ваше фактическое утверждение о значении переменного.

let failed = true; 
try { 
    expect(femaleNames).toContainItem('Brad'); 
} catch (e) { 
    failed = false; 
} 
expected(failed).toBe(false); 
+1

Thanks Carl - даст ему преимущество! Не знал, что он работал через исключения. –

+1

Carl - спасибо за это. Это ядро ​​решения, которое я придумал, теперь отредактированный обратно в мой вопрос. Все, что я сделал, завершает его, чтобы вы могли написать 'expect (fn) .toFailTest (expectedErrorMessage)' –