如何解决Sinon 存根替换整个测试文件的类属性而不是描述块
我正在尝试替换类的静态方法,以便它返回用于测试目的的自定义值。
我的文件中有多个测试(描述)块,我的目标是仅替换其中一个描述块中的静态方法。
问题是所有测试都替换了该方法,即使我有一个使用原始方法替换静态方法的拆卸方法。
一些代码:
class Cat {
static sound() {
return "Meow";
}
}
module.exports = {
Cat
}
const sinon = require("sinon");
const { Cat } = require("./myClass");
describe("Main tests",() => {
describe("Test Cat",() => {
it("Meows",() => {
expect(Cat.sound()).toBe("Meow")
})
})
describe("Test Dog",() => {
const stub = sinon
.stub(Cat,"sound")
.callsFake(() => "Woof");
afterall(() => {
stub.restore();
});
it("Barks",() => {
expect(Cat.sound()).toBe("Woof")
})
})
})
测试结果 - 未替换的测试用例失败:
FAIL ./index.test.js
Main tests
Test Cat
✕ Meows (6ms)
Test Dog
✓ Barks
● Main tests › Test Cat › Meows
expect(received).toBe(expected) // Object.is equality
Expected: "Meow"
Received: "Woof"
7 | describe("Test Cat",() => {
8 | it("Meows",() => {
> 9 | expect(Cat.sound()).toBe("Meow")
| ^
10 | })
11 | })
12 |
有没有办法防止这种情况发生?
我尝试使用 createSandBox
:
const sandBox = sinon.createSandBox()
const stub = sandBox
.stub(Cat,"sound") // etc
但都是一样的。
任何帮助将不胜感激。
解决方法
只需使用 jestjs
(无需 sinon
)即可轻松完成此任务。
只需使用jest.spyOb
函数来监听sound
函数,你就可以模拟这个函数的结果:
const { Cat } = require('./myClass');
describe('Main tests',() => {
beforeEach(() => {
jest.spyOn(Cat,'sound');
});
afterEach(() => {
jest.resetAllMocks();
});
describe('Test Cat',() => {
it('Meows',() => {
// Don't mock,just call actual logic
expect(Cat.sound()).toBe('Meow');
});
});
describe('Test Dog',() => {
it('Barks',() => {
Cat.sound.mockReturnValue('Woof'); // mock return value of `sound()`
expect(Cat.sound()).toBe('Woof');
});
});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。