From ceec1afec2bb187fecef0f5006dfe27ee3e1a9a6 Mon Sep 17 00:00:00 2001 From: dave caruso Date: Sat, 24 Jun 2023 02:24:05 -0400 Subject: [PATCH] Add vi.spyOn and clean up some mock function binding calls (#3376) * Add vi.spyOn and clean up some binding calls * add vi.restoreAllMocks * remove junk file --------- Co-authored-by: Jarred Sumner --- src/bun.js/bindings/JSMockFunction.cpp | 12 ++++-------- src/bun.js/test/jest.zig | 25 +++++++++++++------------ test/bun.lockb | Bin 56172 -> 86272 bytes test/js/bun/test/mock-fn.test.js | 12 ++++++++++-- test/js/bun/test/test-interop.js | 19 +++++++++++++++++++ test/package.json | 3 ++- 6 files changed, 48 insertions(+), 23 deletions(-) diff --git a/src/bun.js/bindings/JSMockFunction.cpp b/src/bun.js/bindings/JSMockFunction.cpp index b7c2659b46..fbfcf0c9e4 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(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(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 a1a4f2af81..f43afb1a24 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 fc86845e1846f0c1eaa293c8c02352394ab88ce2..a26f2fdfe6a7ad0bdba3b640016513c492125a7d 100755 GIT binary patch delta 28130 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 diff --git a/test/js/bun/test/mock-fn.test.js b/test/js/bun/test/mock-fn.test.js index eac981fd13..8504e3d70e 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 5c41082d6a..4b2199ae93 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 a9b8db913f..4803050138 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": {