Метод Жасмин-Шпионов.
Я читал документацию Jasmine, и я изо всех сил пытался понять, что на самом деле делает метод Spies .and.stub
. Английский не мой родной язык, поэтому я даже не знаю, что на самом деле означает слово "заглушка", и на моем языке нет перевода.
В документации говорится:
Когда стратегия вызова используется для шпиона, исходное поведение stubbing может быть возвращено в любое время с помощью и .stub.
describe("A spy", function() {
var foo, bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, 'setBar').and.callThrough();
});
it("can call through and then stub in the same spec", function() {
foo.setBar(123);
expect(bar).toEqual(123);
foo.setBar.and.stub();
bar = null;
foo.setBar(123);
expect(bar).toBe(null);
});
});
Что делает and.stub
действительно и как оно полезно?
Ответы
Ответ 1
В связи с этим вы можете посмотреть на wikipedia: http://en.wikipedia.org/wiki/Test_stub
В двух словах это "поддельный" объект, который вы можете контролировать, который заменяет "настоящий" объект в вашем коде.
Для функции я понимаю, что and.stub()
удаляет эффект and.callThrough()
для шпиона.
Когда вы вызываете and.callThrough
, шпион действует как прокси-сервер, вызывая реальную функцию, но проходя через объект-шпион, позволяя добавлять тесты, такие как ожидание.
Когда вы вызываете and.stub
, или если вы никогда не звоните and.callThrough
, шпион не будет вызывать реальную функцию. Это действительно полезно, когда вы не хотите проверять поведение объекта, но убедитесь, что он был вызван. Помогая вам сохранить ваш тест по-настоящему унитарным.
Ответ 2
Чтобы выполнить предыдущий ответ:
В самом деле, это не ясно из документа, но это очень ясно в исходном коде:
https://github.com/jasmine/jasmine/blob/4be20794827a63ca5295848c58ffc478624ee4dc/src/core/SpyStrategy.js
plan = function() {};
- > вызываемая функция пуста
this.callThrough = function() {
plan = originalFn;
- > вызываемая функция является исходной функцией
this.stub = function(fn) {
plan = function() {};
- > вызываемая функция пуста (снова)