具有承诺处理的单元测试 - node.js
Unit test with promise handling - node.js
我想用异步函数对代码进行单元测试。这是我在 user.test.js
上的代码
'use strict'
const UserDomain = require("../../../../../../bin/modules/users/repositories/commands/domain")
const UserHandler = require("../../../../../../bin/modules/users/repositories/commands/command_handler")
const expect = require('chai').expect;
const assert = require('chai').assert;
const sinon = require('sinon');
describe('User domain', () => {
describe('".login(data)"', () => {
let user;
beforeEach( () => {
user = {
clientId : "adithyavisnu",
clientSecret : "secretOfmine@19"
}
});
it("should return error when username/password is empty", (done)=> {
done();
// let
})
it("should return object", async () => {
const domainStub = sinon.stub(UserDomain.prototype, 'login');
const result = await UserHandler.login(user);
sinon.assert.calledOnce(domainStub);
domainStub.restore();
})
});
});
如果正常代码(不是上面的单元测试代码)const result = await UserHandler.login(user);
将有一个对象响应,但是当我在 user.test.js 中这样做时它没有得到响应。 result
未定义。
这是user_handler代码
'use strict';
const User = require('./domain');
const login = async (data) => {
const postData = async () => {
const user = new User();
const result = await user.login(data);
return result;
}
const response = await postData();
return response;
}
是我在代码上做错了什么或缺少某些代码吗?
如果您认为有不清楚的信息,我很抱歉
感谢您的回复
在正常流程中,UserHandler 调用 Domain.login 方法并 return 返回结果对象。当您 运行 单元测试时,您正在对 Domain.login 方法进行存根。所以,它不会 return 作为正常流程的结果。您可以制作存根 return 一些结果对象并测试它,或者只是监视 Domain.login 而不是存根,如果您只想检查 Domain.login 是否被调用而不改变它行为。如果您愿意,请在此处阅读有关 stubs/spies 的更多信息 - http://sinonjs.org/releases/v1.17.7/stubs/
我想用异步函数对代码进行单元测试。这是我在 user.test.js
上的代码'use strict'
const UserDomain = require("../../../../../../bin/modules/users/repositories/commands/domain")
const UserHandler = require("../../../../../../bin/modules/users/repositories/commands/command_handler")
const expect = require('chai').expect;
const assert = require('chai').assert;
const sinon = require('sinon');
describe('User domain', () => {
describe('".login(data)"', () => {
let user;
beforeEach( () => {
user = {
clientId : "adithyavisnu",
clientSecret : "secretOfmine@19"
}
});
it("should return error when username/password is empty", (done)=> {
done();
// let
})
it("should return object", async () => {
const domainStub = sinon.stub(UserDomain.prototype, 'login');
const result = await UserHandler.login(user);
sinon.assert.calledOnce(domainStub);
domainStub.restore();
})
});
});
如果正常代码(不是上面的单元测试代码)const result = await UserHandler.login(user);
将有一个对象响应,但是当我在 user.test.js 中这样做时它没有得到响应。 result
未定义。
这是user_handler代码
'use strict';
const User = require('./domain');
const login = async (data) => {
const postData = async () => {
const user = new User();
const result = await user.login(data);
return result;
}
const response = await postData();
return response;
}
是我在代码上做错了什么或缺少某些代码吗?
如果您认为有不清楚的信息,我很抱歉
感谢您的回复
在正常流程中,UserHandler 调用 Domain.login 方法并 return 返回结果对象。当您 运行 单元测试时,您正在对 Domain.login 方法进行存根。所以,它不会 return 作为正常流程的结果。您可以制作存根 return 一些结果对象并测试它,或者只是监视 Domain.login 而不是存根,如果您只想检查 Domain.login 是否被调用而不改变它行为。如果您愿意,请在此处阅读有关 stubs/spies 的更多信息 - http://sinonjs.org/releases/v1.17.7/stubs/