我正在编写单元测试,我需要为函数内的函数设置模拟响应。
这是我想要模拟的功能:
cassandraDriver.js
module.exports = ({
cassandra_user,
cassandra_password,
cassandra_address
}) => {
if (!cassandra_address.length) throw Error('Cassandra address is not valid')
return new Promise((resolve, reject) => {
try {
const client = new driver.Client({
contactPoints: cassandra_address.split(','),
authProvider: authProvider(cassandra_user, cassandra_password),
queryconfig: {
consistency: driver.types.consistencies.quorum
}
})
return resolve(client)
} catch (e) {
reject(e)
}
})
}
这是使用它的文件:
const {
cassandraDriver
} = require('./lib')
module.exports = async ({
username = 'cassandra', //default values
password = 'cassandra', //default values
address,
keyspace,
replication_factor = 1,
migration_script_path,
logger = require('bunyan').createLogger({name: 'BuildCassandra'})
} = {}) => {
try {
const client = await cassandraDriver(username, password, address)
}).catch(err => {
throw Error(err)
})
} catch (e) {
logger.error(e)
throw e
}
}
如何在单元测试中模拟对'cassandraDriver'的调用?我尝试使用重新连接,但该方法没有像通常那样暴露。 提前谢谢。
答案 0 :(得分:0)
让我们修改你的功能,以便它可以接受模拟驱动程序而不是cassandraDriver
MyLabel
(我还删除了一个多余的.catch块)
接下来,你应该创建一个" cassandra-driver-mock.js"它模拟cassandra驱动程序的行为以进行单元测试
当然,单元测试会将模拟而非真实驱动程序作为选项参数传递答案 1 :(得分:0)
您可以存储在测试文件中导出cassandraDriver
的模块:
import cassandraDriver from "<path-to-cassandraDriver.js>";
jest.mock("<path-to-cassandraDriver.js>", () => jest.mock());
cassandraDriver.mockImplementation(() => {
// Stub implementation and return value
});
有关详细信息,请参阅Manual Mocks。