Vij*_*wad 5 javascript node.js ecmascript-6 es6-promise jestjs
我遇到了一个非常复杂的情况。我会尽量保持简洁。
所以我在myModule.js 中有这样的代码:
const lib = require('@third-party/lib');
const myFunction = () => {
const client = lib.createClient('foo');
return new Promise((resolve, reject) => {
client.on('error', (err) => reject(err));
client.on('success', () => {
client.as(param1).post(param2, param3, (err, data) => {
if (err) reject(err);
// Some important logical processing of data
resolve(data);
});
});
});
}
module.exports = { myFunction };
Run Code Online (Sandbox Code Playgroud)
有几件事情我可以嘲笑,如:createClient。我无法嘲笑的是我什至不知道如何做到这一点的事件部分。还有那.as().post()部分。
这是我的笑话测试的样子:
const myModule = require('./myModule');
const mockData = require('./mockData');
describe('myFunction', () => {
it('Should resolve promise when lib calls success event', async () => {
try {
const myData = await myModule.myFunction();
expect(myData).toMatchObject(mockData.resolvedData);
} catch (err) {
expect(err).toBeNull();
}
})
});
Run Code Online (Sandbox Code Playgroud)
任何帮助,非常感谢。
我试图找到类似的问题,但在这一点上,我的思想刚刚停止工作......如果您需要更多详细信息,请告诉我。
这里\xe2\x80\x99是你需要做的:
\n\n// EventEmitter is here to rescue you\nconst events = require("events");\n\n// Mock the third party library\nconst lib = require("@third-party/lib");\n\nlib.createClient.mockImplementationOnce(params => {\n const self = new events.EventEmitter();\n\n self.as = jest.fn().mockImplementation(() => {\n // Since we\'re calling post on the same object.\n return self;\n });\n\n self.post = jest.fn().mockImplementation((arg1, _cb) => {\n // Can have a conditional check for arg 1 if so desird\n _cb(null, { data : "foo" });\n });\n\n // Finally call the required event with delay.\n // Don\'t know if the delay is necessary or not.\n setInterval(() => {\n self.emit("success");\n }, 10);\n return self;\n}).mockImplementationOnce(params => {\n const self = new events.EventEmitter();\n\n // Can also simulate event based error like so:\n setInterval(() => {\n self.emit("error", {message: "something went wrong."});\n }, 10);\n return self;\n}).mockImplementationOnce(params => {\n const self = new events.EventEmitter();\n self.as = jest.fn().mockImplementation(() => {\n return self;\n });\n\n self.post = jest.fn().mockImplementation((arg1, _cb) => {\n // for negative callback in post I did:\n _cb({mesage: "Something went wrong"}, null);\n });\n\n setInterval(() => {\n self.emit("success");\n }, 10);\n return self;\n});\nRun Code Online (Sandbox Code Playgroud)\n\n这只是您需要放入test.js文件中的模拟对象。
\n\n不确定此代码是否能按原样工作,尽管 won\xe2\x80\x99t 需要大量调试。
\n\n如果您只想积极的情况,请删除第二个mockImplementationOnce并将第一个替换mockImplementationOnce为mockImplementation。
| 归档时间: |
|
| 查看次数: |
4727 次 |
| 最近记录: |