18.10.2014, 14:02
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Как протистирова callback-функцию в mocha/chai ?
Здравствуйте, подскажите пожалуйста.
Как протестировать с помощью mocha или chai функцию коллбэк?
К примеру эту:
function getSum(a, b, callback) {
if (callback && typeof callback === 'function') {
return callback(a, b);
}
return a; // 5
}
getSum(5, 5, function (a, b) {
return a + b; // 10
});
Спасибо.
P.S. желательно без sinonjs.org , но если без него не получится, то скиньте пожалуйста пример, как это сделать с ним.
|
|
18.10.2014, 14:10
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
вообще это все на главной странице фреймворка написано ...
когда передаёшь callback в it, можно указать колбек для окончания теста
его сигнатура - node callback. то бишь первым параметром done ожидает получить ошибку.
describe('#find()', function(){
it('respond with matching records', function(*!*done*/!*){
db.find({ type: 'User' }, function(err, res){
*!*if (err) return done(err);*/!*
res.should.have.length(3);
*!*done();*/!*
})
})
})
в твоём случае можно и без sinon обойтись, но лучше его знать, дабы тесты выглядели простыми
Сообщение от Armen
|
Как протестировать с помощью mocha или chai функцию коллбэк?
|
всмысле. конкретно что нужно протестировать? сам факт вызова функции callback ? да, это sinon.
как именно - смотри страницу библиотеки. там второй пример показывает, что к чему:
it("calls the original function", function () {
var callback = sinon.spy();
var proxy = once(callback);
proxy();
assert(callback.called);
});
Если нужно проверить, что callback передаётся верное количество агрументов (и правильность самих агументов), см. в доку:
// вызван с аргументами arg1 и arg2 и более никакими
spyCall.calledWithExactly(arg1, arg2);
ну а вообще для сахарного использования sinon с chai, рекомендую этот модуль: sinon-chai
Если не смогёшь адаптировать свой код (или лень), вот спойлер:
function getSum(a, b, callback) {
if (callback && typeof callback === 'function') {
return callback(a, b);
}
return a; // 5
}
describe('getSum', function () {
it('should pass in callback two numbers passed first', function (done) {
getSum(5, 6, function (a, b) {
a.should.be.equal(5);
b.should.be.equal(6);
done();
});
});
});
Последний раз редактировалось melky, 18.10.2014 в 14:24.
|
|
18.10.2014, 14:52
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Сообщение от melky
|
вообще это все на главной странице фреймворка написано ...
когда передаёшь callback в it, можно указать колбек для окончания теста
его сигнатура - node callback. то бишь первым параметром done ожидает получить ошибку.
describe('#find()', function(){
it('respond with matching records', function(*!*done*/!*){
db.find({ type: 'User' }, function(err, res){
*!*if (err) return done(err);*/!*
res.should.have.length(3);
*!*done();*/!*
})
})
})
в твоём случае можно и без sinon обойтись, но лучше его знать, дабы тесты выглядели простыми
всмысле. конкретно что нужно протестировать? сам факт вызова функции callback ? да, это sinon.
как именно - смотри страницу библиотеки. там второй пример показывает, что к чему:
it("calls the original function", function () {
var callback = sinon.spy();
var proxy = once(callback);
proxy();
assert(callback.called);
});
Если нужно проверить, что callback передаётся верное количество агрументов (и правильность самих агументов), см. в доку:
// вызван с аргументами arg1 и arg2 и более никакими
spyCall.calledWithExactly(arg1, arg2);
ну а вообще для сахарного использования sinon с chai, рекомендую этот модуль: sinon-chai
Если не смогёшь адаптировать свой код (или лень), вот спойлер:
function getSum(a, b, callback) {
if (callback && typeof callback === 'function') {
return callback(a, b);
}
return a; // 5
}
describe('getSum', function () {
it('should pass in callback two numbers passed first', function (done) {
getSum(5, 6, function (a, b) {
a.should.be.equal(5);
b.should.be.equal(6);
done();
});
});
});
|
Спасибо большое за информацию!
А протестировать, нужно конкретно то, что функция коллбек возвращает результат и что этот результат правльный
|
|
18.10.2014, 16:12
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Armen
|
А протестировать, нужно конкретно то, что функция коллбек возвращает результат и что этот результат правльный
|
если операции синхронные, тогда это просто проверка возвращаемого результата:
как-то так:
function getSum(a, b, callback) {
if (callback && typeof callback === 'function') {
return callback(a, b);
}
return a; // 5
}
describe('getSum', function () {
it('should sum two numbers', function () {
var sum = getSum(5, 5, function (a, b) {
return a + b; // 10
});
sum.should.be.equal(10);
});
});
|
|
18.10.2014, 20:20
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Сообщение от melky
|
если операции синхронные, тогда это просто проверка возвращаемого результата:
как-то так:
function getSum(a, b, callback) {
if (callback && typeof callback === 'function') {
return callback(a, b);
}
return a; // 5
}
describe('getSum', function () {
it('should sum two numbers', function () {
var sum = getSum(5, 5, function (a, b) {
return a + b; // 10
});
sum.should.be.equal(10);
});
});
|
А вы уверенны? А то, что-то не работает?
|
|
18.10.2014, 21:43
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Armen
|
А вы уверенны? А то, что-то не работает?
|
Всё работает. только нужно настроить Chai для режима сравнений "should". или я не понял)
http://runnable.com/VEKnOzWERn9jjdG2...nd-hello-world
Нажать на "Run". там же файлы, где что делается
Последний раз редактировалось melky, 18.10.2014 в 21:45.
|
|
18.10.2014, 22:35
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Сообщение от melky
|
если операции синхронные, тогда это просто проверка возвращаемого результата:
как-то так:
function getSum(a, b, callback) {
if (callback && typeof callback === 'function') {
return callback(a, b);
}
return a; // 5
}
describe('getSum', function () {
it('should sum two numbers', function () {
var sum = getSum(5, 5, function (a, b) {
return a + b; // 10
});
sum.should.be.equal(10);
});
});
|
Выводит ошибку ReferenceError: Can't find variable: require
|
|
18.10.2014, 23:56
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Armen
|
Выводит ошибку ReferenceError: Can't find variable: require
|
это вопрос окружения. я запускаю в node.js и там есть require
|
|
19.10.2014, 18:53
|
|
Кандидат Javascript-наук
|
|
Регистрация: 28.06.2009
Сообщений: 120
|
|
Сообщение от melky
|
это вопрос окружения. я запускаю в node.js и там есть require
|
А можно ли протестировать callback без chai? А только с помощью mocha?
|
|
|
|