2016-01-12 3 views
0

Я хотел бы захватить параметр, переданный методу заглушки. И тогда я могу выполнить утверждение о свойствах этого параметра. Для Java это Mockito's ArgumentCaptor. Есть ли какая-либо эквивалентная вещь в javascript test framework?Любые эквиваленты ArgumentCaptor Mockito в javascript test framework?

+0

Какой Javascript тест рамки конкретно вы говорите? – robertklep

+0

Я использую mocha + chai + sinon + издевательство. – franziga

ответ

2

Вот пример:

const assert = require('chai').assert; 
const expect = require('chai').expect; 
const sinon = require('sinon'); 

const obj = { 
    divideByFive(a) { 
    return a/5; 
    }, 
    testFunc(a, b) { 
    return this.divideByFive(a + b) + 23; 
    } 
}; 

describe('obj.testFunc()',() => { 

    afterEach(() => { 
    // Restore to the original implementation 
    obj.divideByFive.restore(); 
    }); 

    it('should call divideByFive() with the right arguments',() => { 
    var spy = sinon.spy(obj, 'divideByFive'); 
    obj.testFunc(42, 1337); 
    assert(spy.calledWith(1379)); 
    }); 

    it('should return the value returned by divideByFive(), increased by 23',() => { 
    sinon.stub(obj, 'divideByFive').returns(1234); 
    expect(obj.testFunc(42, 1337)).to.equal(1257); 
    }); 

}); 

Вы можете использовать .calledWith() (предоставленный Синоне), чтобы проверить, если шпион/стаб был вызван с конкретными аргументами. Вы должны проконсультироваться с the documentation для получения дополнительных возможностей.

Вот автономный тест мокко, чтобы проверить, если шпион получил колл с объектом, который имел определенные свойства, установленные для конкретных значений:

const assert = require('chai').assert; 
const sinon = require('sinon'); 
const spy = sinon.spy(); 

// Call the spy with an object argument. 
spy({ foo : 'bar', xxx : 'yyy' }); 

// Check the properties. 
it('should have called spy with foo:bar', function() { 
    assert(spy.calledWithMatch({ foo : 'bar' })); 
}); 

it('should have called spy with xxx:yyy', function() { 
    assert(spy.calledWithMatch({ xxx : 'yyy' })); 
}); 

it('should have called spy with xxx:zzz (WILL FAIL)', function() { 
    assert(spy.calledWithMatch({ xxx : 'zzz' })); 
}); 
+0

Поскольку передаваемый параметр является объектом, а не единственным значением, и я хочу проверить несколько свойств внутри этого объекта. Можно ли сделать это с помощью calledWith? – franziga

+1

'.calledWith()' точно соответствует аргументу точно, но '.calledWithMatch()' позволит вам частично сопоставлять объекты (если, например, вы хотите удостовериться, что только определенное свойство установлено на определенное значение, независимо от любых других свойств, которые может иметь объект). – robertklep

+0

Спасибо, я пробовал и работает. Можете ли вы привести пример с вызовомWithMatch? Поэтому я могу отметить это как ответ. – franziga

Смежные вопросы