Я недавно начал писать тесты, и у меня нет большого опыта. Если бы кто-то из членов сообщества мог указать мне верное направление, я был бы очень благодарен.Мой сценарий прост, я на полпути к нему, но не могу точно решить свою проблему.Ниже приведен мой код ..
return generateServiceToken(req.body.appId, req.body.token, req.auth.userId)
.then(result => {
someService
.createCredentialsForUser(
req.auth.userId,
result.user.uid,
result.user.token
)
.then(result => {
return res.status(201).send(result);
});
})
.catch(error => {
return res.status(500).send({ error: `Credentials not valid - ${error}` });
});
Функция generateToken отвечает за вызов API стороннего производителя для создания учетных данных для их платформы и возврата учетных данных создания.
function generateServiceToken(appId: String, token: String, userId: String) {
return new Promise ((resolve, reject)=>{
const apiURL = `https://someapi.com/api/api.php?op=useradd&token=${token}&addr=${userId}&appid=${appId}`;
request.post(apiURL, (error, response, body) => {
const resp = JSON.parse(body);
if (resp.error) return reject(resp.error);
return resolve(resp);
});
});
}
Принимая во внимание, чтофункция someService.createCredentialsForUser отвечает за сохранение этих учетных данных в базе данных и возвращает результат в простом формате json.
Я просто застрял в заглушке функции someService.createCredentialsForUser при написании тестового примера для happy-path
Мой тестовый пример показан ниже.
describe.only("controllers/v3/some/", () => {
const c = {};
before(() => {
c.sandbox = sinon.createSandbox();
c.someServiceStub = c.sandbox
.stub(someService, "createCredentialsForUser")
.resolves(VALID_OUTPUT);
});
describe("when the request is valid", () => {
before(() => {
c.agent = setupApp(authenticationMiddleware(USER_ID));
return test(c, VALID_REQUEST_BODY);
});
it("should return 201", () => {
expect(c.response.statusCode).to.equal(201);
});
it("should call createCredentialsForUser", () => {
expect(c.stubs.createCredentialsForUser.called).to.equal(true);
});
});
});
Функция TestCase выглядит следующим образом ..
function testCase(context, body = VALID_REQUEST_BODY) {
context.sandbox.resetHistory();
console.log(body.length);
const c = context;
return context.agent
.put(`/v3/some/`)
.send(body)
.then(r => {
c.response = r;
});
//.catch(err=>{c.response=err});
}
Моя функция someService.createCredentialsForUser отвечает за сохранение данных в базе данных.Я хочу заглушить, что таким образом, чтобы я мог ожидать возврата ответа от generateServiceToken
Я пробовал пары способов, которые выглядят следующим образом ..
Сначала я пытался заглушить эту функцию перед() но не повезло, что это не с
error : IllegalArgumentError: init() must be called prior to use.
Во-вторых, я попытался
c.response = c.sandbox.stub(someService, 'createCredentialsForUser').returns(Promise.resolve(r));
в моей тестовой функции заглушить со значением разрешенного обещания, но не повезло, в этом случае она завершается с той же ошибкой, что и выше.