Можно ли издеваться над методами мангуста, которые используются в файлах, которые не являются спецификациями? Я хотел бы иметь возможность фиктивные операции в пути похожа на этот пример:Mocking mongoose using Sinon
модель/user.js:
userSchema.statics.SetUsername = function (userId, username, callback) {
instance.findOneAndUpdate({ UserId: userId },
{ $set: { Name: username } },
{ new: true },
function (error, doc) {
if (error) {
logger.error(error);
callback({ error: error });
} else {
callback(doc);
}
})
}
SPEC/userSpec.js:
describe("User module", function() {
var User = require('../models/User');
var UserMock = sinon.mock(User);
UserMock
.expects('findOneAndUpdate').withArgs({UserId: 9 },{ $set: { Name: 'Lol'}},{ new: true })
.yields(null, {UserId: 9, Username: 'Lol'});
describe("POST /setUsername", function() {
it("returns status code 200", function (done) {
request.post({
url: setUsernameUrl,
qs: { userId: '9', username: 'Lol' }
}, function (error, response, body) {
expect(response.statusCode).toBe(200);
done();
});
});
});
Это не работа, findOneAndUpdate
внутри функция SetUsername
не получает издеваться.
Если это вообще плохая идея, вы могли бы предложить другой подход?
@EDIT: Думаю, я понимаю, почему это не имеет смысла. Теперь я ищу способ тестирования методов единственного mongoose, вызывая их из теста, а не путем отправки запроса на тестовый сервер. Тест будет выглядеть следующим образом:
it("returns document", function (done) {
User.SetUsername(9, 'Lol', function (result) {
expect(result).not.toBeNull();
expect(result.UserId).toBe(9);
expect(result.Username).toBe('Lol');
done();
})
});