aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/JSMockFunction.cpp12
-rw-r--r--src/bun.js/test/jest.zig25
-rwxr-xr-xtest/bun.lockbbin56172 -> 86272 bytes
-rw-r--r--test/js/bun/test/mock-fn.test.js12
-rw-r--r--test/js/bun/test/test-interop.js19
-rw-r--r--test/package.json3
6 files changed, 48 insertions, 23 deletions
diff --git a/src/bun.js/bindings/JSMockFunction.cpp b/src/bun.js/bindings/JSMockFunction.cpp
index b7c2659b4..fbfcf0c9e 100644
--- a/src/bun.js/bindings/JSMockFunction.cpp
+++ b/src/bun.js/bindings/JSMockFunction.cpp
@@ -391,6 +391,7 @@ void JSMockFunction::visitChildrenImpl(JSCell* cell, Visitor& visitor)
visitor.append(fn->instances);
visitor.append(fn->returnValues);
visitor.append(fn->invocationCallOrder);
+ visitor.append(fn->spyOriginal);
fn->mock.visit(visitor);
}
DEFINE_VISIT_CHILDREN(JSMockFunction);
@@ -526,13 +527,13 @@ extern "C" void JSMock__resetSpies(Zig::GlobalObject* globalObject)
globalObject->mockModule.activeSpies.clear();
}
-extern "C" EncodedJSValue jsFunctionResetSpies(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe)
+extern "C" EncodedJSValue JSMock__jsRestoreAllMocks(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe)
{
JSMock__resetSpies(jsCast<Zig::GlobalObject*>(globalObject));
return JSValue::encode(jsUndefined());
}
-extern "C" EncodedJSValue JSMock__spyOn(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* callframe)
+extern "C" EncodedJSValue JSMock__jsSpyOn(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* callframe)
{
auto& vm = lexicalGlobalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
@@ -963,7 +964,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsMockFunctionGetter_protoImpl, (JSC::JSGlobalObject *
return JSValue::encode(jsUndefined());
}
-JSC_DEFINE_HOST_FUNCTION(jsMockFunctionConstructor, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callframe))
+extern "C" EncodedJSValue JSMock__jsMockFn(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* callframe)
{
auto& vm = lexicalGlobalObject->vm();
auto* globalObject = jsCast<Zig::GlobalObject*>(lexicalGlobalObject);
@@ -997,11 +998,6 @@ JSC_DEFINE_HOST_FUNCTION(jsMockFunctionConstructor, (JSC::JSGlobalObject * lexic
return JSValue::encode(thisObject);
}
-extern "C" EncodedJSValue JSMockFunction__createObject(Zig::GlobalObject* globalObject)
-{
- auto& vm = globalObject->vm();
- return JSValue::encode(JSC::JSFunction::create(vm, globalObject, 0, "mock"_s, jsMockFunctionConstructor, ImplementationVisibility::Public));
-}
extern "C" EncodedJSValue JSMockFunction__getCalls(EncodedJSValue encodedValue)
{
JSValue value = JSValue::decode(encodedValue);
diff --git a/src/bun.js/test/jest.zig b/src/bun.js/test/jest.zig
index a1a4f2af8..f43afb1a2 100644
--- a/src/bun.js/test/jest.zig
+++ b/src/bun.js/test/jest.zig
@@ -333,7 +333,7 @@ pub const Jest = struct {
pub fn Bun__Jest__createTestModuleObject(globalObject: *JSC.JSGlobalObject) callconv(.C) JSC.JSValue {
JSC.markBinding(@src());
- const module = JSC.JSValue.createEmptyObject(globalObject, 11);
+ const module = JSC.JSValue.createEmptyObject(globalObject, 12);
const test_fn = JSC.NewFunction(globalObject, ZigString.static("test"), 2, TestScope.call, false);
module.put(
@@ -431,31 +431,32 @@ pub const Jest = struct {
Expect.getConstructor(globalObject),
);
- const mock_fn = JSMockFunction__createObject(globalObject);
- const spyOn = JSC.NewFunction(globalObject, ZigString.static("spyOn"), 2, JSMock__spyOn, false);
- const restoreAllMocks = JSC.NewFunction(globalObject, ZigString.static("restoreAllMocks"), 2, jsFunctionResetSpies, false);
- module.put(globalObject, ZigString.static("mock"), mock_fn);
+ const mockFn = JSC.NewFunction(globalObject, ZigString.static("fn"), 1, JSMock__jsMockFn, false);
+ const spyOn = JSC.NewFunction(globalObject, ZigString.static("spyOn"), 2, JSMock__jsSpyOn, false);
+ const restoreAllMocks = JSC.NewFunction(globalObject, ZigString.static("restoreAllMocks"), 2, JSMock__jsRestoreAllMocks, false);
+ module.put(globalObject, ZigString.static("mock"), mockFn);
const jest = JSValue.createEmptyObject(globalObject, 3);
- jest.put(globalObject, ZigString.static("fn"), mock_fn);
+ jest.put(globalObject, ZigString.static("fn"), mockFn);
jest.put(globalObject, ZigString.static("spyOn"), spyOn);
jest.put(globalObject, ZigString.static("restoreAllMocks"), restoreAllMocks);
module.put(globalObject, ZigString.static("jest"), jest);
module.put(globalObject, ZigString.static("spyOn"), spyOn);
- const vi = JSValue.createEmptyObject(globalObject, 1);
- vi.put(globalObject, ZigString.static("fn"), mock_fn);
+ const vi = JSValue.createEmptyObject(globalObject, 3);
+ vi.put(globalObject, ZigString.static("fn"), mockFn);
+ vi.put(globalObject, ZigString.static("spyOn"), spyOn);
+ vi.put(globalObject, ZigString.static("restoreAllMocks"), restoreAllMocks);
module.put(globalObject, ZigString.static("vi"), vi);
return module;
}
- extern fn JSMockFunction__createObject(*JSC.JSGlobalObject) JSC.JSValue;
-
extern fn Bun__Jest__testPreloadObject(*JSC.JSGlobalObject) JSC.JSValue;
extern fn Bun__Jest__testModuleObject(*JSC.JSGlobalObject) JSC.JSValue;
- extern fn jsFunctionResetSpies(*JSC.JSGlobalObject, *JSC.CallFrame) JSC.JSValue;
- extern fn JSMock__spyOn(*JSC.JSGlobalObject, *JSC.CallFrame) JSC.JSValue;
+ extern fn JSMock__jsMockFn(*JSC.JSGlobalObject, *JSC.CallFrame) JSC.JSValue;
+ extern fn JSMock__jsRestoreAllMocks(*JSC.JSGlobalObject, *JSC.CallFrame) JSC.JSValue;
+ extern fn JSMock__jsSpyOn(*JSC.JSGlobalObject, *JSC.CallFrame) JSC.JSValue;
pub fn call(
_: void,
diff --git a/test/bun.lockb b/test/bun.lockb
index fc86845e1..a26f2fdfe 100755
--- a/test/bun.lockb
+++ b/test/bun.lockb
Binary files differ
diff --git a/test/js/bun/test/mock-fn.test.js b/test/js/bun/test/mock-fn.test.js
index eac981fd1..8504e3d70 100644
--- a/test/js/bun/test/mock-fn.test.js
+++ b/test/js/bun/test/mock-fn.test.js
@@ -2,7 +2,16 @@
* This file is meant to be runnable in both Jest and Bun.
* `bunx jest mock-fn.test.js`
*/
-var { isBun, test, describe, expect, jest, vi, mock, bunTest, spyOn } = require("./test-interop.js")();
+var { isBun, expect, jest, vi, mock, spyOn } = require("./test-interop.js")();
+
+// if you want to test vitest, comment the above and uncomment the below
+
+// import { expect, describe, test, vi } from "vitest";
+// const isBun = false;
+// const jest = { fn: vi.fn, restoreAllMocks: vi.restoreAllMocks };
+// const spyOn = vi.spyOn;
+// import * as extended from "jest-extended";
+// expect.extend(extended);
async function expectResolves(promise) {
expect(promise).toBeInstanceOf(Promise);
@@ -434,7 +443,6 @@ describe("mock()", () => {
return "3";
},
);
- expect(result).toBe(undefined);
expect(fn()).toBe("1");
});
test("withImplementation (async)", async () => {
diff --git a/test/js/bun/test/test-interop.js b/test/js/bun/test/test-interop.js
index 5c41082d6..4b2199ae9 100644
--- a/test/js/bun/test/test-interop.js
+++ b/test/js/bun/test/test-interop.js
@@ -20,6 +20,25 @@ module.exports = () => {
vi: bunTest.vi,
spyOn: bunTest.spyOn,
};
+ } else if (process.env.VITEST) {
+ const vi = require("vitest");
+
+ return {
+ isBun: false,
+ bunTest: null,
+ test: vi.test,
+ describe: vi.describe,
+ it: vi.it,
+ expect: vi.expect,
+ beforeEach: vi.beforeEach,
+ afterEach: vi.afterEach,
+ beforeAll: vi.beforeAll,
+ afterAll: vi.afterAll,
+ jest: { fn: vi.fn },
+ mock: null,
+ vi,
+ spyOn: vi.spyOn,
+ };
} else {
const globals = require("@jest/globals");
const extended = require("jest-extended");
diff --git a/test/package.json b/test/package.json
index a9b8db913..480305013 100644
--- a/test/package.json
+++ b/test/package.json
@@ -22,7 +22,8 @@
"supertest": "^6.1.6",
"svelte": "^3.55.1",
"typescript": "^5.0.2",
- "undici": "^5.20.0"
+ "undici": "^5.20.0",
+ "vitest": "^0.32.2"
},
"private": true,
"scripts": {