我需要测试以下代码:
createCassandraDriver
const driver = require('cassandra-driver')
module.exports = ({
cassandra_user,
cassandra_password,
cassandra_address
}) => {
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)
}
})
}我在嘲笑“司机,客户”的电话。我试着用“间谍”来做,就像这样:
'use strict';
const rewire = require('rewire'),
driver = require('cassandra-driver'),
createCassandraDriver = require('../../lib/createCassandraDriver.js');
const defaultArguments = () => {
return {
'cassandra_address': '127.0.0.1',
'cassandra_user': 'cassandra_user',
'cassandra_password': 'cassandra_password'
};
}
jest.mock("cassandra-driver");
describe('Create cassandra driver tests', function () {
describe('success flow', function () {
it('Should pass without any errors ', async function () {
await createCassandraDriver(defaultArguments())
});
});
afterEach(function () {
jest.restoreAllMocks()
});
});模拟文件
const driver = jest.genMockFromModule('cassandra-driver');
driver.Client = function () {return "cassandra_client"}
module.exports = driver;但是我收到一条错误消息,上面写着‘驱动不是一个函数’,这是正确的。
那么,我怎么能嘲笑“driver.Client”的调用呢?
发布于 2018-05-08 07:33:22
我建议在Jest测试中使用手动莫克斯来模拟外部依赖项。
__mocks__旁边创建一个名为node_modules的目录。__mocks__/cassandra-driver.jsmodule.exports = {
types: {
consistencies: {
quorum: null
}
},
Client: jest.fn()
};jest.mock("cassandra-driver");现在,每次您在测试中导入cassandra-driver或在测试中导入的任何文件中,您在步骤2中实现的模块都将被导入。
这允许您使用任何一个driver.Client调用模拟方法来替换实现、存根返回值或访问模拟实例。
下面是一个完整的测试示例:
import driver from "cassandra-driver";
import createCassandraDriver from "./createCassandraDriver";
jest.mock("cassandra-driver");
const clientStub = {
foo: "bar"
};
driver.Client.mockImplementation(() => clientStub);
it("renders without crashing", async () => {
const result = await createCassandraDriver({
cassandra_user: "foo",
cassandra_password: "bar",
cassandra_address: "baz"
});
expect(result).toEqual(clientStub);
});发布于 2018-05-07 12:15:09
您只能使用jest.spyOn监视对象的方法--在这里,driver是createCassandraDriver模块中的一个私有变量,所以我们不能使用它。
看起来你使用的是重线包装和__set__吗?如果是这样的话,我认为您应该能够通过使用jest.fn实现您想要的结果。
let createCassandraDriverSpy = jest.fn(clientMock);
createCassandraDriver.__set__('driver', createCassandraDriverSpy)https://stackoverflow.com/questions/50209154
复制相似问题