2014-08-27 3 views
1

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

describe("An async test suite", function() { 
    it("should fail asynchronously", function (done, fail) { 
    var promise = myLibraryCall(); 
    promise.then(done, function(reason) { fail(reason); }); 
    }); 
}); 

Однако, нет ничего, как fail звонок доступный от того, что я могу видеть. И я не могу генерировать исключение в асинхронном случае ошибки, потому что он не пойман Jasmine - все, что я получаю, - это окончательный общий тайм-аут. Каков наилучший способ решить эту проблему?

ответ

1

В дополнение к модификации самого жасмина, простым решением является создание обертки вокруг комбинации expect и custom matcher сбойным сообщением.

function endTestAfter(promise, done) { 
    var customMatchers = { 
    toFailWith: function() { 
     return { 
     compare: function (actual, expected) { 
      return { 
      pass: false, 
      message: "Asynchronous test failure: " + JSON.stringify(expected) 
      }; 
     } 
     } 
    } 
    }; 
    jasmine.addMatchers(customMatchers); 
    promise.done(done, function (reason) { 
    expect(null).toFailWith(reason); 
    done(); 
    }); 
} 

Это приводит к следующему набора тестов код:

describe("An async test suite", function() { 
    it("should fail asynchronously", function (done, fail) { 
    var promise = myLibraryCall(); 
    endTestAfter(promise, done); 
    }); 
}); 
Смежные вопросы