Назначение сообщения об ошибке для ожидания звонков

В настоящее время я изучаю AngularJS, и часть этого касается создания тестов. На данный момент я пытаюсь понять, как создавать более полезные сообщения об ошибках для неудачных тестов. Например, если бы я был в Java-стране и писал тесты JUnit, я бы сделал что-то вроде этого:

assertTrue( "The foo value should be true at this point", bar.isFoo() );

Таким образом, я получу этот первый параметр в журнале, если проверка не пройдена.

Для логических проверок в мокко (с чаем и синоном, если это имеет значение) у меня есть...

expect(broadcastSpy.calledWith('order.add')).to.be.true;

Если это не удается, я получаю следующее:

expected false to be true
AssertionError: expected false to be true

Есть ли способ воспроизвести это полезное сообщение об ошибке при тестировании моего приложения?


person chooban    schedule 20.05.2014    source источник
comment
Тесты DRY js не очень полезны. Будьте откровенны. it('bar.isFoo() should be true when stuff happens', function() { expect(broadcastSpy.calledWith('order.add')).to.be.true; });   -  person J.Wells    schedule 20.05.2014
comment
Возможно, я просто не очень идиоматично пишу тесты, так как мне нужно ожидать несколько вызовов.   -  person chooban    schedule 20.05.2014
comment
Я согласен. Тест должен быть тестом. Группа тестов представляет собой набор. Если успешный тест требует нескольких утверждений, он все равно должен иметь краткие критерии успеха/неудачи.   -  person J.Wells    schedule 20.05.2014


Ответы (2)


Я кое-что упомянул об этом в ответе на другой вопрос. Я только что проверил код Чай, чтобы убедиться, что ничего не изменилось с тех пор, как я написал этот ответ, и обнаружил, что следующее все еще верно. Код:

expect(foo).to.be.true;

не принимает пользовательское сообщение, поскольку true — это свойство, которое получает свое значение через геттер. Однако вы можете сделать это:

expect(foo).to.equal(true, "foo should be true");

чтобы получить пользовательское сообщение, если утверждение не выполняется.

Интерфейс утверждений Chai поддерживает сообщения для всех утверждений, например:

assert.isTrue(foo, "foo should be true");
person Louis    schedule 20.05.2014
comment
Спасибо! Я подозреваю, что мои тесты станут чем-то вроде смеси стилей, пока я не выберу то, что я считаю Единственным Верным Путем! :) - person chooban; 20.05.2014

Я случайно наткнулся на, возможно, более удовлетворительный ответ: expect может принимать сообщение в качестве второго аргумента, например:

expect(foo, 'foo should be true').to.be.true;

Это отображает следующий вывод (в случае, если foo равно false):

AssertionError: foo should be true: expected false to be true

Источник: см. документацию Chai — найдите текст «Сообщение может также может быть задан как второй аргумент expect."

person Erwin Wessels    schedule 03.09.2018