diff --git a/packages/assets-controllers/src/NftController.test.ts b/packages/assets-controllers/src/NftController.test.ts
index 9a4cde00597..c90e50ef32f 100644
--- a/packages/assets-controllers/src/NftController.test.ts
+++ b/packages/assets-controllers/src/NftController.test.ts
@@ -1,5 +1,9 @@
 import type { Network } from '@ethersproject/providers';
-import type { AccountsControllerSelectedAccountChangeEvent } from '@metamask/accounts-controller';
+import type {
+  AccountsControllerGetAccountAction,
+  AccountsControllerGetSelectedAccountAction,
+  AccountsControllerSelectedAccountChangeEvent,
+} from '@metamask/accounts-controller';
 import type { ApprovalControllerMessenger } from '@metamask/approval-controller';
 import { ApprovalController } from '@metamask/approval-controller';
 import { ControllerMessenger } from '@metamask/base-controller';
@@ -146,7 +150,13 @@ jest.mock('uuid', () => {
  * @param args.mockNetworkClientConfigurationsByNetworkClientId - Used to construct
  * mock versions of network clients and ultimately mock the
  * `NetworkController:getNetworkClientById` action.
+ * @param args.getAccount - Used to construct mock versions of the
+ * `AccountsController:getAccount` action.
+ * @param args.getSelectedAccount - Used to construct mock versions of the
+ * `AccountsController:getSelectedAccount` action.
  * @param args.defaultSelectedAccount - The default selected account to use in
+ * @param args.addApprovalRequest - Used to construct mock versions of the
+ * `ApprovalController:addRequest` action.
  * @returns A collection of test controllers and mocks.
  */
 function setupController({
@@ -157,6 +167,8 @@ function setupController({
   getERC721OwnerOf,
   getERC1155BalanceOf,
   getERC1155TokenURI,
+  getAccount,
+  getSelectedAccount,
   mockNetworkClientConfigurationsByNetworkClientId = {},
   defaultSelectedAccount = OWNER_ACCOUNT,
 }: {
@@ -185,6 +197,14 @@ function setupController({
     ReturnType<AssetsContractControllerGetERC1155TokenURIAction['handler']>,
     Parameters<AssetsContractControllerGetERC1155TokenURIAction['handler']>
   >;
+  getAccount?: jest.Mock<
+    ReturnType<AccountsControllerGetAccountAction['handler']>,
+    Parameters<AccountsControllerGetAccountAction['handler']> | [null]
+  >;
+  getSelectedAccount?: jest.Mock<
+    ReturnType<AccountsControllerGetSelectedAccountAction['handler']>,
+    Parameters<AccountsControllerGetSelectedAccountAction['handler']>
+  >;
   mockNetworkClientConfigurationsByNetworkClientId?: Record<
     NetworkClientId,
     NetworkClientConfiguration
@@ -209,19 +229,15 @@ function setupController({
     getNetworkClientById,
   );
 
-  const mockGetAccount = jest
-    .fn()
-    .mockReturnValue(defaultSelectedAccount ?? OWNER_ACCOUNT);
-
+  const mockGetAccount =
+    getAccount ?? jest.fn().mockReturnValue(defaultSelectedAccount);
   messenger.registerActionHandler(
     'AccountsController:getAccount',
     mockGetAccount,
   );
 
-  const mockGetSelectedAccount = jest
-    .fn()
-    .mockReturnValue(defaultSelectedAccount ?? OWNER_ACCOUNT);
-
+  const mockGetSelectedAccount =
+    getSelectedAccount ?? jest.fn().mockReturnValue(defaultSelectedAccount);
   messenger.registerActionHandler(
     'AccountsController:getSelectedAccount',
     mockGetSelectedAccount,
@@ -637,10 +653,13 @@ describe('NftController', () => {
         triggerPreferencesStateChange,
         triggerSelectedAccountChange,
       } = setupController({
+        getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
+        getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
         getERC721TokenURI: jest
           .fn()
-          .mockImplementation(() => 'https://testtokenuri.com'),
-        getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
+          .mockResolvedValue('https://testtokenuri.com'),
+        getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
+        getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
       });
       triggerSelectedAccountChange(OWNER_ACCOUNT);
       triggerPreferencesStateChange({
@@ -716,10 +735,13 @@ describe('NftController', () => {
         triggerPreferencesStateChange,
         triggerSelectedAccountChange,
       } = setupController({
+        getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
+        getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
         getERC721TokenURI: jest
           .fn()
-          .mockImplementation(() => 'https://testtokenuri.com'),
-        getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
+          .mockResolvedValue('https://testtokenuri.com'),
+        getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
+        getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
       });
       triggerSelectedAccountChange(OWNER_ACCOUNT);
       triggerPreferencesStateChange({
@@ -795,10 +817,13 @@ describe('NftController', () => {
         triggerPreferencesStateChange,
         triggerSelectedAccountChange,
       } = setupController({
+        getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
+        getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
         getERC721TokenURI: jest
           .fn()
-          .mockImplementation(() => 'ipfs://testtokenuri.com'),
-        getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
+          .mockResolvedValue('https://testtokenuri.com'),
+        getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
+        getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
       });
       triggerSelectedAccountChange(OWNER_ACCOUNT);
       triggerPreferencesStateChange({
@@ -874,10 +899,13 @@ describe('NftController', () => {
         triggerPreferencesStateChange,
         triggerSelectedAccountChange,
       } = setupController({
+        getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
+        getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
         getERC721TokenURI: jest
           .fn()
-          .mockImplementation(() => 'ipfs://testtokenuri.com'),
-        getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
+          .mockResolvedValue('https://testtokenuri.com'),
+        getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
+        getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
       });
 
       triggerSelectedAccountChange(OWNER_ACCOUNT);
@@ -955,13 +983,17 @@ describe('NftController', () => {
         triggerPreferencesStateChange,
         triggerSelectedAccountChange,
       } = setupController({
+        getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
+        getERC721OwnerOf: jest
+          .fn()
+          .mockRejectedValue(new Error('Not an ERC721 contract')),
+        getERC1155BalanceOf: jest.fn().mockResolvedValue(new BN(1)),
         getERC721TokenURI: jest
           .fn()
           .mockRejectedValue(new Error('Not an ERC721 contract')),
         getERC1155TokenURI: jest
           .fn()
-          .mockImplementation(() => 'https://testtokenuri.com'),
-        getERC1155BalanceOf: jest.fn().mockImplementation(() => new BN(1)),
+          .mockResolvedValue('https://testtokenuri.com'),
       });
 
       triggerSelectedAccountChange(OWNER_ACCOUNT);
@@ -1042,13 +1074,17 @@ describe('NftController', () => {
 
       const { nftController, messenger, triggerPreferencesStateChange } =
         setupController({
+          getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
+          getERC721OwnerOf: jest
+            .fn()
+            .mockRejectedValue(new Error('Not an ERC721 contract')),
+          getERC1155BalanceOf: jest.fn().mockResolvedValue(new BN(1)),
           getERC721TokenURI: jest
             .fn()
             .mockRejectedValue(new Error('Not an ERC721 contract')),
           getERC1155TokenURI: jest
             .fn()
-            .mockImplementation(() => 'https://testtokenuri.com'),
-          getERC1155BalanceOf: jest.fn().mockImplementation(() => new BN(1)),
+            .mockResolvedValue('https://testtokenuri.com'),
         });
       triggerPreferencesStateChange({
         ...getDefaultPreferencesState(),
@@ -1134,18 +1170,12 @@ describe('NftController', () => {
         triggerPreferencesStateChange,
         triggerSelectedAccountChange,
       } = setupController({
-        getERC721OwnerOf: jest
-          .fn()
-          .mockImplementation(() => SECOND_OWNER_ADDRESS),
+        getERC721OwnerOf: jest.fn().mockResolvedValue(SECOND_OWNER_ADDRESS),
         getERC721TokenURI: jest
           .fn()
-          .mockImplementation(() => 'https://testtokenuri.com'),
-        getERC721AssetName: jest
-          .fn()
-          .mockImplementation(() => 'testERC721Name'),
-        getERC721AssetSymbol: jest
-          .fn()
-          .mockImplementation(() => 'testERC721Symbol'),
+          .mockResolvedValue('https://testtokenuri.com'),
+        getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
+        getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
       });
 
       const requestId = 'approval-request-id-1';
@@ -1241,13 +1271,9 @@ describe('NftController', () => {
         getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
         getERC721TokenURI: jest
           .fn()
-          .mockImplementation(() => 'https://testtokenuri.com'),
-        getERC721AssetName: jest
-          .fn()
-          .mockImplementation(() => 'testERC721Name'),
-        getERC721AssetSymbol: jest
-          .fn()
-          .mockImplementation(() => 'testERC721Symbol'),
+          .mockResolvedValue('https://testtokenuri.com'),
+        getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
+        getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
       });
 
       const requestId = 'approval-request-id-1';