Вот мой код:
var assert = require('assert')
var sinon = require('sinon')
// This is the business logic we want to test.
//
// Adds two numbers and returns the result. Also calls the callback with
// the result as argument when callback is defined.
function add(a, b, callback) {
var result = a + b
if (typeof callback !== 'undefined') {
callback(result)
}
return result
}
describe('Tests', function () {
it('test callback is called', function () {
var callback = sinon.fake()
add(1, 2, callback)
assert(callback.calledWith(3))
})
it('test return value when callback absent', function () {
var result = add(1, 2)
assert(result, 3)
})
it('test return value when callback present', function () {
var result = add(1, 2, sinon.fake())
assert(result, 3)
})
})
Вот вывод:
$ node_modules/.bin/mocha foo.js
Tests
✓ test callback is called
✓ test return value when callback absent
✓ test return value when callback present
3 passing (7ms)
Меня беспокоит третий тест с описанием 'test return value when callback present'
.Нас не волнует обратный вызов, который мы передаем add()
в третьем тесте.Я мог бы также передать анонимную функцию, такую как function () {}
вместо sinon.fake()
.Я вижу, что я также могу передать sinon.stub()
или sinon.mock()
вместо sinon.fake()
.
С таким большим количеством различных вариантов, я запутался, что является подходящим аргументом для передачи в качестве функции обратного вызова, когда мы незаботиться о функции вообще?Поскольку все четыре варианта: function () {}
, sinon.fake()
, sinon.stub()
и sinon.mock()
, кажется, работают нормально, вот мой вопрос:
- Подходит ли
sinon
проект или модульное тестирование?требует, чтобы мы использовали один вариант над другим для этого случая, или все четыре варианта одинаково технически правильны? - Нужно ли нам знать о каких-либо ловушках, связанных с одним или несколькими из этих вариантов?