Я, наконец, понял, как получить ссылку на результаты неудавшейся спецификации с Jasmine 2.3.4, но я не уверен, что это будет именно то, что вы ищете.
Я использовал файл Vanilla PlayerSpec.js, который поставляется с установкой Jasmine. Я выполнил файл SpecRunner.html для выполнения теста.
Вот что я изменил в файле PlayerSpec:
describe("Player", function() {
var player;
var song;
var index = 0;
beforeEach(function() {
player = new Player();
song = new Song();
this.index = index++;
});
afterEach(function() {
if (this.index > 0)
{ var failed = jsApiReporter.specResults(this.index -1, 1)[0].failedExpectations;
console.log('failed: ', failed);
if (failed.length > 0)
{
console.log('After: ', this, failed[0].message);
alert('ha');
}
}
});
it("should not fail", function()
{ expect(1).toEqual(2);
});
...
Остальная часть файла такой же, как она была первоначально.
Вот что я изменил:
Добавлен переменная индекса для отслеживания текущего номера спецификации.
В функции beforeEach я добавил значение индекса к этому «объекту», который передается между его функциями, beforeEach и afterEach. Это позволяет мне общаться между ними по мере необходимости. Я использую этот механизм для передачи индекса. Осторожно! Если вы просто попытаетесь использовать значение индекса, это не сработает! Функции обрабатываются асинхронно, поэтому есть хорошая вероятность, что значение индекса НЕ будет тем, что вы ожидаете в функции afterEach.
В функции afterEach я проверяю, чтобы индекс был больше 0. В моем локальном тестировании первый spec не работает, но он не распознается до тех пор, пока не будет вызвано время SECOND. Это одна из причин, по которым я не уверен, что это будет работать. Затем я получаю ссылку на failExpectations и выполняю некоторую условную обработку, если распознаю ошибку.
Последнее изменение, которое присутствует, - это добавление новой спецификации, которая приведет к сбою.
Вот бедный копия моих результатов консоли Firebug:
failed: [Object { matcherName="toEqual", message="Expected 1 to equal 2.", stack="[email protected]://localhost:4...ne-2.3.4/boot.js:110:5\n", more...}]
PlayerSpec.js (line 15)
After: Object { index=1} Expected 1 to equal 2.
PlayerSpec.js (line 18)
failed: []
PlayerSpec.js (line 15)
failed: []
PlayerSpec.js (line 15)
failed: []
PlayerSpec.js (line 15)
failed: []
PlayerSpec.js (line 15)
Эта проблема была поездка для меня. К сожалению, я должен перейти к другим вещам.
Я искренне надеюсь, что это решает вашу проблему или, по крайней мере, указывает на то, что вы в правильном направлении. Надеюсь, это тоже поможет другим.
Удачи!
Приятно! Я никогда не думал, чтобы (ab) использовал репортеров Jasmine, чтобы заменить этот бит функциональности, и мне это вообще не кажется взломанным. [Здесь] (http://jsfiddle.net/dimmreaper/Lfvhjdjh/1/) обновленная скрипка, показывающая это вместо старого jasmine.getEnv(). CurrentSpec', и это действительно позволяет вам проверять результаты спецификации сразу после его завершения. –
Я принимаю это как лучший ответ, так как это чистое решение, которое обеспечивает функциональность, которую я искал. –
Блестящее решение. WOW: D @tlrobinson Спасибо :) – ShellZero