我是
writing a Bluetooth library
我在开玩笑。为了我的测试,我正在做实际的无线电通讯,以确保一切都能正常工作。但是,此类测试不能在CI系统上运行。所以对于我的CI系统,以及我的CI系统,我想使用mock。对于当地的发展,我不想嘲笑任何事情。
import MyModule from "./myModule";
if (true) {
jest.mock("./myModule");
}
describe("MyModule", () => {
let myModule;
beforeEach(() => {
myModule = new MyModule();
});
test("I am NOT mocked", () => {
expect(myModule.powerOn()).toBe("I am the original implementation");
});
test("I am mocked", () => {
if (myModule.powerOn.mockReturnValueOnce)
myModule.powerOn.mockReturnValueOnce("I am a mock");
expect(myModule.powerOn()).toBe("I am a mock");
});
});
但这是行不通的。我的测试结果是
FAIL ./index.test.js
MyModule
â I am NOT mocked (3ms)
â I am mocked (6ms)
â MyModule ⺠I am mocked
expect(received).toBe(expected) // Object.is equality
Expected: "I am a mock"
Received: "I am the original implementation"
19 | if (myModule.powerOn.mockReturnValueOnce)
20 | myModule.powerOn.mockReturnValueOnce("I am a mock");
> 21 | expect(myModule.powerOn()).toBe("I am a mock");
| ^
22 | });
23 | });
24 |
at Object.toBe (index.test.js:21:32)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 passed, 2 total
Snapshots: 0 total
if (true) {
jest.mock("./myModule");
}
到
jest.mock("./myModule");
它按预期工作。
你可以在这里试试
https://github.com/LukasBombach/jest-conditionally-mock-module-example
我已经读到jest需要在文件的根作用域中有模块mock,因为它在运行文件之前解析文件并对其执行一些魔法。
我知道这个
.
但既然看起来不可能
jest.mock
在if子句中,有没有其他方法可以让CI使用mock并在本地处理我的实际实现?