У меня есть контроллер Учетные записи с методом sum и служебный файл с именем validation с объектом register . Этот объект имеет метод validate , который проверяет предоставленную форму и возвращает логическое значение.
Controller
sum: function(req, res) {
//validate form with a validation service function
const validator = new validation.register();
let check = validator.validate(req.body.form);
let count = 0;
if (check) {
count += 1;
} else {
count -= 1;
}
res.send(count);
},
test
//imports
const chai = require("chai");
const expect = chai.expect;
const sinon = require("sinon");
const util = require('util'); // to print complex objects
const acountsC = require("../../../api/controllers/AcountsController.js");
describe("AcountsController", function() {
describe("sum", function() {
let req = {
body: {
form: {}
}
}
let res = {
send: sinon.spy()
}
let validation = {
register: {
validate: function() {}
}
}
let stub_validate = sinon.stub(validation.register, "validate").returns(true);
it("count should be 1 when validation is true", function() {
acountsC.sum(req, res);
expect(count).to.equal(1);
});
});
});
журнал испытаний
AcountsController
sum
1) count should be 1 when validation is true
0 passing (5s)
1 failing
1) AcountsController
sum
count should be 1 when validation is true:
ReferenceError: count is not defined
примечание
Я понимаю, что тест должен выполнить фрагмент кода, который мы вызываем, заменив внешние функции, вызываемые в этом фрагменте кода (контроллер), возвращая все, что мы установили. Если тест выполняет этот фрагмент кода, почему я не могу получить доступ к переменным, созданным в контроллере?
Я попытался, отслеживая res.send (), и проверить, был ли он вызван с 1. У меня не получилось. Я везде искал, как выполнить утверждение для переменной, но ничего не нашел. : (
надеюсь, вы можете помочь