如何使用 SinonJS 将间谍放到单个函数中?
How to put a spy to a single function using SinonJS?
我有这个:
import * as sinon from 'sinon';
import {someFunc, someOtherFunc} from 'someModule';
describe("Something", () => {
let sandbox: sinon.SinonSandbox;
beforeEach('setup sandbox', function() {
sandbox = sinon.createSandbox();
});
afterEach('restore sandbox', function() {
sandbox.restore();
});
it("SomeTest", async () => {
const spy = sanbox.spy(someFunc);
someOtherFunc(1);
console.log(spy.callCount) // prints 0
})
someFunc() 只是一个简单的函数,它被导出为:
export function someFunc(...)
它是由 someOtherFunc() 调用的。然而,间谍永远不会被召唤。调用次数为0.
这样用诗乃不行吗?这适用于 Jest。
我认为它不起作用,因为 sinon 没有用间谍替换函数。
我也试过对模块本身进行监视:
import * as lib from 'someModule'
...
it("SomeTest", async () => {
const spy = sanbox.spy(lib);
lib.someOtherFunc(1);
console.log(spy.someFunc.callCount) // prints 0
})
但这会产生相同的结果。 0 个调用。
我认为你可以编写对象方法的间谍程序。您可能可以导入整个对象并使用对象为该函数编写一个间谍。
import * as sinon from 'sinon';
import someModule from 'someModule';
describe("Something", () => {
let sandbox: sinon.SinonSandbox;
beforeEach('setup sandbox', function() {
sandbox = sinon.createSandbox();
});
afterEach('restore sandbox', function() {
sandbox.restore();
});
it("SomeTest", async() => {
const spy = sanbox.spy(someModule, 'someFunc');
someModule.someOtherFunc(1);
console.log(spy.callCount) // prints 0
})
澄清一下:
为了能够使用 Sinon 间谍,您需要以某种方式导出您的模块功能。基本上,使用 类 或对象。
作品:
export default {
func() {},
func2() {}
}
export const someLib {
func() {},
func2() {}
}
module.exports = {
func() {}
}
class Ping {
func() {}
}
export default Ping();
或类似的东西。
什么不起作用:
export function func() {}
export function func2 {}
export const foo = () => {}
等等..
我有这个:
import * as sinon from 'sinon';
import {someFunc, someOtherFunc} from 'someModule';
describe("Something", () => {
let sandbox: sinon.SinonSandbox;
beforeEach('setup sandbox', function() {
sandbox = sinon.createSandbox();
});
afterEach('restore sandbox', function() {
sandbox.restore();
});
it("SomeTest", async () => {
const spy = sanbox.spy(someFunc);
someOtherFunc(1);
console.log(spy.callCount) // prints 0
})
someFunc() 只是一个简单的函数,它被导出为:
export function someFunc(...)
它是由 someOtherFunc() 调用的。然而,间谍永远不会被召唤。调用次数为0.
这样用诗乃不行吗?这适用于 Jest。
我认为它不起作用,因为 sinon 没有用间谍替换函数。
我也试过对模块本身进行监视:
import * as lib from 'someModule'
...
it("SomeTest", async () => {
const spy = sanbox.spy(lib);
lib.someOtherFunc(1);
console.log(spy.someFunc.callCount) // prints 0
})
但这会产生相同的结果。 0 个调用。
我认为你可以编写对象方法的间谍程序。您可能可以导入整个对象并使用对象为该函数编写一个间谍。
import * as sinon from 'sinon';
import someModule from 'someModule';
describe("Something", () => {
let sandbox: sinon.SinonSandbox;
beforeEach('setup sandbox', function() {
sandbox = sinon.createSandbox();
});
afterEach('restore sandbox', function() {
sandbox.restore();
});
it("SomeTest", async() => {
const spy = sanbox.spy(someModule, 'someFunc');
someModule.someOtherFunc(1);
console.log(spy.callCount) // prints 0
})
澄清一下:
为了能够使用 Sinon 间谍,您需要以某种方式导出您的模块功能。基本上,使用 类 或对象。
作品:
export default {
func() {},
func2() {}
}
export const someLib {
func() {},
func2() {}
}
module.exports = {
func() {}
}
class Ping {
func() {}
}
export default Ping();
或类似的东西。
什么不起作用:
export function func() {}
export function func2 {}
export const foo = () => {}
等等..