lafrech: I had to modify the `paths` used in the tests because it uses a schema passed as string and that would mess up with existing tests. Besides, it is not valid OAS 3.
lafrech: I don't know if this should be considered a feature or a bugfix.

It fixes the code to match the doc, but it's basically adding a feature that wasn't there at all, although shown in one doc example.

I'd make this a minor release, not bugfix release.
lafrech: Considering #565, I'm tempted to modify marshmallow plugin as written above. We can make it a major release.
lafrech: I just added a commit to implement the behaviour described above in MarmallowPlugin: if a string does not resolve to a schema from the registry, consider it a reference.

Breaking changes:

- We don't raise if a schema name is typoed, the error is silently ignored and a false ref is generated.
- Registry errors are not caught and turned into ValueError anymore (e.g. if Component.schema is given a string that is not found in the registry). I don't think it is that bad. The error message was not that helpful and the error can be tracked down with the raw RegistryError.
diff --git a/src/apispec/core.py b/src/apispec/core.py
index 8c6bb6c..11a7c88 100644
--- a/src/apispec/core.py
+++ b/src/apispec/core.py
@@ -300,13 +300,26 @@ class APISpec:
         Otherwise, it is assumed to be a reference name as string and the corresponding $ref
         string is returned.
 
-        :param str obj_type: "parameter" or "response"
-        :param dict|str obj: parameter or response in dict form or as ref_id string
+        :param str obj_type: "schema", "parameter", "response" or "security_scheme"
+        :param dict|str obj: object in dict form or as ref_id string
         """
         if isinstance(obj, dict):
             return obj
         return build_reference(obj_type, self.openapi_version.major, obj)
 
+    def _resolve_schema(self, obj):
+        """Replace schema reference as string with a $ref if needed."""
+        if not isinstance(obj, dict):
+            return
+        if self.openapi_version.major < 3:
+            if "schema" in obj:
+                obj["schema"] = self.get_ref("schema", obj["schema"])
+        else:
+            if "content" in obj:
+                for content in obj["content"].values():
+                    if "schema" in content:
+                        content["schema"] = self.get_ref("schema", content["schema"])
+
     def clean_parameters(self, parameters):
         """Ensure that all parameters with "in" equal to "path" are also required
         as required by the OpenAPI specification, as well as normalizing any
@@ -365,6 +378,9 @@ class APISpec:
         for operation in (operations or {}).values():
             if "parameters" in operation:
                 operation["parameters"] = self.clean_parameters(operation["parameters"])
+            # OAS 3
+            if "requestBody" in operation:
+                self._resolve_schema(operation["requestBody"])
             if "responses" in operation:
                 responses = OrderedDict()
                 for code, response in operation["responses"].items():
@@ -373,6 +389,6 @@ class APISpec:
                     except (TypeError, ValueError):
                         if self.openapi_version.major < 3 and code != "default":
                             warnings.warn("Non-integer code not allowed in OpenAPI < 3")
-
+                    self._resolve_schema(response)
                     responses[str(code)] = self.get_ref("response", response)
                 operation["responses"] = responses
diff --git a/src/apispec/ext/marshmallow/common.py b/src/apispec/ext/marshmallow/common.py
index 940292b..a781da5 100644
--- a/src/apispec/ext/marshmallow/common.py
+++ b/src/apispec/ext/marshmallow/common.py
@@ -20,13 +20,7 @@ def resolve_schema_instance(schema):
         return schema()
     if isinstance(schema, marshmallow.Schema):
         return schema
-    try:
-        return marshmallow.class_registry.get_class(schema)()
-    except marshmallow.exceptions.RegistryError:
-        raise ValueError(
-            "{!r} is not a marshmallow.Schema subclass or instance and has not"
-            " been registered in the marshmallow class registry.".format(schema)
-        )
+    return marshmallow.class_registry.get_class(schema)()
 
 
 def resolve_schema_cls(schema):
@@ -39,13 +33,7 @@ def resolve_schema_cls(schema):
         return schema
     if isinstance(schema, marshmallow.Schema):
         return type(schema)
-    try:
-        return marshmallow.class_registry.get_class(schema)
-    except marshmallow.exceptions.RegistryError:
-        raise ValueError(
-            "{!r} is not a marshmallow.Schema subclass or instance and has not"
-            " been registered in the marshmallow class registry.".format(schema)
-        )
+    return marshmallow.class_registry.get_class(schema)
 
 
 def get_fields(schema, *, exclude_dump_only=False):
diff --git a/src/apispec/ext/marshmallow/openapi.py b/src/apispec/ext/marshmallow/openapi.py
index f36bfa6..24d77ac 100644
--- a/src/apispec/ext/marshmallow/openapi.py
+++ b/src/apispec/ext/marshmallow/openapi.py
@@ -67,7 +67,12 @@ class OpenAPIConverter(FieldConverterMixin):
 
         :param schema: schema to add to the spec
         """
-        schema_instance = resolve_schema_instance(schema)
+        try:
+            schema_instance = resolve_schema_instance(schema)
+        # If schema is a string and is not found in registry,
+        # assume it is a schema reference
+        except marshmallow.exceptions.RegistryError:
+            return build_reference("schema", self.openapi_version.major, schema)
         schema_key = make_schema_key(schema_instance)
         if schema_key not in self.refs:
             name = self.schema_name_resolver(schema)
diff --git a/src/apispec/ext/marshmallow/schema_resolver.py b/src/apispec/ext/marshmallow/schema_resolver.py
index d76f8c7..07da37b 100644
--- a/src/apispec/ext/marshmallow/schema_resolver.py
+++ b/src/apispec/ext/marshmallow/schema_resolver.py
@@ -162,8 +162,8 @@ class SchemaResolver:
 
     def resolve_schema_dict(self, schema):
         """Resolve a marshmallow Schema class, object, or a string that resolves
-        to a Schema class or an OpenAPI Schema Object containing one of the above
-        to an OpenAPI Schema Object or Reference Object.
+        to a Schema class or a schema reference or an OpenAPI Schema Object
+        containing one of the above to an OpenAPI Schema Object or Reference Object.
 
         If the input is a marshmallow Schema class, object or a string that resolves
         to a Schema class the Schema will be translated to an OpenAPI Schema Object

Sample does not reference components
When I run the sample from https://github.com/marshmallow-code/apispec/blob/dev/docs/quickstart.rst

the expected output

```
# {'components': {'parameters': {},
#                 'responses': {},
#                 'schemas': {'Gist': {'properties': {'id': {'format': 'int64',
#                                                            'type': 'integer'},
#                                                     'name': {'type': 'string'}}}}},
#  'info': {'description': 'A minimal gist API',
#           'title': 'Gisty',
#           'version': '1.0.0'},
#  'openapi': '3.0.2',
#  'paths': OrderedDict([('/gist/{gist_id}',
#                         {'get': {'responses': {'200': {'content': {'application/json': {'schema': {'$ref': '#/definitions/Gist'}}}}}}})]),
#  'tags': []}
```

includes an additional `OrderedDict` (see `responses`) and does not set `$ref` to the schema:

```
{'components': {'schemas': {'Gist': {'properties': {'id': {'format': 'int64',
                                                           'type': 'integer'},
                                                    'name': {'type': 'string'}}}}},
 'info': {'description': 'A minimal gist API',
          'title': 'Gisty',
          'version': '1.0.0'},
 'openapi': '3.0.2',
 'paths': OrderedDict([('/gist/{gist_id}',
                        {'get': {'responses': OrderedDict([('200',
                                                            {'content': {'application/json': {'schema': 'Gist'}}})])}})])}
```
(version 3.3.0)
diff --git a/tests/test_core.py b/tests/test_core.py
index aa5de60..922c739 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -307,7 +307,7 @@ class TestPath:
                     }
                 ],
                 "responses": {
-                    "200": {"schema": "Pet", "description": "successful operation"},
+                    "200": {"description": "successful operation"},
                     "400": {"description": "Invalid ID supplied"},
                     "404": {"description": "Pet not found"},
                 },
@@ -618,6 +618,35 @@ class TestPath:
         with pytest.raises(APISpecError, match=message):
             spec.path("/pet/{petId}", operations={"dummy": {}})
 
+    def test_path_resolve_response_schema(self, spec):
+        schema = {"schema": "PetSchema"}
+        if spec.openapi_version.major >= 3:
+            schema = {"content": {"application/json": schema}}
+        spec.path("/pet/{petId}", operations={"get": {"responses": {"200": schema}}})
+        resp = get_paths(spec)["/pet/{petId}"]["get"]["responses"]["200"]
+        if spec.openapi_version.major < 3:
+            schema = resp["schema"]
+        else:
+            schema = resp["content"]["application/json"]["schema"]
+        assert schema == build_ref(spec, "schema", "PetSchema")
+
+    # requestBody only exists in OAS 3
+    @pytest.mark.parametrize("spec", ("3.0.0",), indirect=True)
+    def test_path_resolve_request_body(self, spec):
+        spec.path(
+            "/pet/{petId}",
+            operations={
+                "get": {
+                    "requestBody": {
+                        "content": {"application/json": {"schema": "PetSchema"}}
+                    }
+                }
+            },
+        )
+        assert get_paths(spec)["/pet/{petId}"]["get"]["requestBody"]["content"][
+            "application/json"
+        ]["schema"] == build_ref(spec, "schema", "PetSchema")
+
 
 class TestPlugins:
     @staticmethod
diff --git a/tests/test_ext_marshmallow.py b/tests/test_ext_marshmallow.py
index e6b78a4..72d9b92 100644
--- a/tests/test_ext_marshmallow.py
+++ b/tests/test_ext_marshmallow.py
@@ -822,6 +822,18 @@ class TestOperationHelper:
         json.dumps(data)
         assert get_nested_schema(RunSchema, "sample") is None
 
+    def test_resolve_schema_dict_ref_as_string(self, spec):
+        schema = {"schema": "PetSchema"}
+        if spec.openapi_version.major >= 3:
+            schema = {"content": {"application/json": schema}}
+        spec.path("/pet/{petId}", operations={"get": {"responses": {"200": schema}}})
+        resp = get_paths(spec)["/pet/{petId}"]["get"]["responses"]["200"]
+        if spec.openapi_version.major < 3:
+            schema = resp["schema"]
+        else:
+            schema = resp["content"]["application/json"]["schema"]
+        assert schema == build_ref(spec, "schema", "PetSchema")
+
 
 class TestCircularReference:
     def test_circular_referencing_schemas(self, spec):
diff --git a/tests/test_ext_marshmallow_openapi.py b/tests/test_ext_marshmallow_openapi.py
index 1293543..5879073 100644
--- a/tests/test_ext_marshmallow_openapi.py
+++ b/tests/test_ext_marshmallow_openapi.py
@@ -48,10 +48,6 @@ class TestMarshmallowFieldToOpenAPI:
 
 
 class TestMarshmallowSchemaToModelDefinition:
-    def test_invalid_schema(self, openapi):
-        with pytest.raises(ValueError):
-            openapi.schema2jsonschema(None)
-
     def test_schema2jsonschema_with_explicit_fields(self, openapi):
         class UserSchema(Schema):
             _id = fields.Int()
@@ -200,10 +196,6 @@ class TestMarshmallowSchemaToParameters:
         res = openapi._field2parameter(field, name="field", location="query")
         assert res["required"] is True
 
-    def test_invalid_schema(self, openapi):
-        with pytest.raises(ValueError):
-            openapi.schema2parameters(None, location="json")
-
     # json/body is invalid for OpenAPI 3
     @pytest.mark.parametrize("openapi", ("2.0",), indirect=True)
     def test_schema_body(self, openapi):

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
-e git+https://github.com/marshmallow-code/apispec.git@043af20446d0e5f2e59d05347b7c7e56a1cec1b3#egg=apispec
attrs==25.3.0
cachetools==5.5.2
certifi==2025.1.31
cfgv==3.4.0
chardet==5.2.0
charset-normalizer==3.4.1
colorama==0.4.6
distlib==0.3.9
exceptiongroup==1.2.2
filelock==3.18.0
flake8==3.8.3
flake8-bugbear==20.1.4
identify==2.6.9
idna==3.10
iniconfig==2.1.0
jsonschema==4.17.3
jsonschema-spec==0.1.6
lazy-object-proxy==1.10.0
marshmallow==3.26.1
mccabe==0.6.1
mock==5.2.0
nodeenv==1.9.1
openapi-schema-validator==0.4.4
openapi-spec-validator==0.5.7
packaging==24.2
pathable==0.4.4
platformdirs==4.3.7
pluggy==1.5.0
prance==23.6.21.0
pre-commit==2.21.0
pycodestyle==2.6.0
pyflakes==2.2.0
pyproject-api==1.9.0
pyrsistent==0.20.0
pytest==8.3.5
PyYAML==6.0.2
requests==2.32.3
rfc3339-validator==0.1.4
ruamel.yaml==0.18.10
ruamel.yaml.clib==0.2.12
six==1.17.0
tomli==2.2.1
tox==4.25.0
typing_extensions==4.13.0
urllib3==2.3.0
virtualenv==20.29.3

name: apispec
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - apispec==4.4.0b1
      - attrs==25.3.0
      - cachetools==5.5.2
      - certifi==2025.1.31
      - cfgv==3.4.0
      - chardet==5.2.0
      - charset-normalizer==3.4.1
      - colorama==0.4.6
      - distlib==0.3.9
      - exceptiongroup==1.2.2
      - filelock==3.18.0
      - flake8==3.8.3
      - flake8-bugbear==20.1.4
      - identify==2.6.9
      - idna==3.10
      - iniconfig==2.1.0
      - jsonschema==4.17.3
      - jsonschema-spec==0.1.6
      - lazy-object-proxy==1.10.0
      - marshmallow==3.26.1
      - mccabe==0.6.1
      - mock==5.2.0
      - nodeenv==1.9.1
      - openapi-schema-validator==0.4.4
      - openapi-spec-validator==0.5.7
      - packaging==24.2
      - pathable==0.4.4
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - prance==23.6.21.0
      - pre-commit==2.21.0
      - pycodestyle==2.6.0
      - pyflakes==2.2.0
      - pyproject-api==1.9.0
      - pyrsistent==0.20.0
      - pytest==8.3.5
      - pyyaml==6.0.2
      - requests==2.32.3
      - rfc3339-validator==0.1.4
      - ruamel-yaml==0.18.10
      - ruamel-yaml-clib==0.2.12
      - six==1.17.0
      - tomli==2.2.1
      - tox==4.25.0
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - virtualenv==20.29.3
prefix: /opt/conda/envs/apispec

tests/test_core.py::TestPath::test_path_resolve_response_schema[2.0] tests/test_core.py::TestPath::test_path_resolve_response_schema[3.0.0] tests/test_core.py::TestPath::test_path_resolve_request_body[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_resolve_schema_dict_ref_as_string[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_resolve_schema_dict_ref_as_string[3.0.0]
tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_instance_with_different_modifers_custom_resolver
tests/test_core.py::TestAPISpecInit::test_raises_wrong_apispec_version tests/test_core.py::TestMetadata::test_openapi_metadata[2.0] tests/test_core.py::TestMetadata::test_openapi_metadata[3.0.0] tests/test_core.py::TestMetadata::test_openapi_metadata_merge_v3[3.0.0] tests/test_core.py::TestTags::test_tag[2.0] tests/test_core.py::TestTags::test_tag[3.0.0] tests/test_core.py::TestTags::test_tag_is_chainable[2.0] tests/test_core.py::TestTags::test_tag_is_chainable[3.0.0] tests/test_core.py::TestComponents::test_schema[2.0] tests/test_core.py::TestComponents::test_schema[3.0.0] tests/test_core.py::TestComponents::test_schema_is_chainable[2.0] tests/test_core.py::TestComponents::test_schema_is_chainable[3.0.0] tests/test_core.py::TestComponents::test_schema_description[2.0] tests/test_core.py::TestComponents::test_schema_description[3.0.0] tests/test_core.py::TestComponents::test_schema_stores_enum[2.0] tests/test_core.py::TestComponents::test_schema_stores_enum[3.0.0] tests/test_core.py::TestComponents::test_schema_discriminator[2.0] tests/test_core.py::TestComponents::test_schema_discriminator[3.0.0] tests/test_core.py::TestComponents::test_schema_duplicate_name[2.0] tests/test_core.py::TestComponents::test_schema_duplicate_name[3.0.0] tests/test_core.py::TestComponents::test_response[2.0] tests/test_core.py::TestComponents::test_response[3.0.0] tests/test_core.py::TestComponents::test_response_is_chainable[2.0] tests/test_core.py::TestComponents::test_response_is_chainable[3.0.0] tests/test_core.py::TestComponents::test_response_duplicate_name[2.0] tests/test_core.py::TestComponents::test_response_duplicate_name[3.0.0] tests/test_core.py::TestComponents::test_parameter[2.0] tests/test_core.py::TestComponents::test_parameter[3.0.0] tests/test_core.py::TestComponents::test_parameter_is_chainable[2.0] tests/test_core.py::TestComponents::test_parameter_is_chainable[3.0.0] tests/test_core.py::TestComponents::test_parameter_duplicate_name[2.0] tests/test_core.py::TestComponents::test_parameter_duplicate_name[3.0.0] tests/test_core.py::TestComponents::test_example[3.0.0] tests/test_core.py::TestComponents::test_example_is_chainable[3.0.0] tests/test_core.py::TestComponents::test_example_duplicate_name[3.0.0] tests/test_core.py::TestComponents::test_security_scheme[2.0] tests/test_core.py::TestComponents::test_security_scheme[3.0.0] tests/test_core.py::TestComponents::test_security_scheme_is_chainable[2.0] tests/test_core.py::TestComponents::test_security_scheme_is_chainable[3.0.0] tests/test_core.py::TestComponents::test_security_scheme_duplicate_name[2.0] tests/test_core.py::TestComponents::test_security_scheme_duplicate_name[3.0.0] tests/test_core.py::TestComponents::test_to_yaml[2.0] tests/test_core.py::TestComponents::test_to_yaml[3.0.0] tests/test_core.py::TestComponents::test_components_can_be_accessed_by_plugin_in_init_spec tests/test_core.py::TestPath::test_path[2.0] tests/test_core.py::TestPath::test_path[3.0.0] tests/test_core.py::TestPath::test_paths_maintain_order[2.0] tests/test_core.py::TestPath::test_paths_maintain_order[3.0.0] tests/test_core.py::TestPath::test_paths_is_chainable[2.0] tests/test_core.py::TestPath::test_paths_is_chainable[3.0.0] tests/test_core.py::TestPath::test_methods_maintain_order[2.0] tests/test_core.py::TestPath::test_methods_maintain_order[3.0.0] tests/test_core.py::TestPath::test_path_merges_paths[2.0] tests/test_core.py::TestPath::test_path_merges_paths[3.0.0] tests/test_core.py::TestPath::test_path_called_twice_with_same_operations_parameters[2.0] tests/test_core.py::TestPath::test_path_called_twice_with_same_operations_parameters[3.0.0] tests/test_core.py::TestPath::test_path_ensures_path_parameters_required[2.0] tests/test_core.py::TestPath::test_path_ensures_path_parameters_required[3.0.0] tests/test_core.py::TestPath::test_path_with_no_path_raises_error[2.0] tests/test_core.py::TestPath::test_path_with_no_path_raises_error[3.0.0] tests/test_core.py::TestPath::test_path_summary_description[2.0] tests/test_core.py::TestPath::test_path_summary_description[3.0.0] tests/test_core.py::TestPath::test_parameter[2.0] tests/test_core.py::TestPath::test_parameter[3.0.0] tests/test_core.py::TestPath::test_invalid_parameter[2.0-parameters0] tests/test_core.py::TestPath::test_invalid_parameter[2.0-parameters1] tests/test_core.py::TestPath::test_invalid_parameter[3.0.0-parameters0] tests/test_core.py::TestPath::test_invalid_parameter[3.0.0-parameters1] tests/test_core.py::TestPath::test_parameter_duplicate[2.0] tests/test_core.py::TestPath::test_parameter_duplicate[3.0.0] tests/test_core.py::TestPath::test_global_parameters[2.0] tests/test_core.py::TestPath::test_global_parameters[3.0.0] tests/test_core.py::TestPath::test_global_parameter_duplicate[2.0] tests/test_core.py::TestPath::test_global_parameter_duplicate[3.0.0] tests/test_core.py::TestPath::test_response[2.0] tests/test_core.py::TestPath::test_response[3.0.0] tests/test_core.py::TestPath::test_response_with_HTTPStatus_code[2.0] tests/test_core.py::TestPath::test_response_with_HTTPStatus_code[3.0.0] tests/test_core.py::TestPath::test_response_with_status_code_range[2.0] tests/test_core.py::TestPath::test_response_with_status_code_range[3.0.0] tests/test_core.py::TestPath::test_path_check_invalid_http_method[2.0] tests/test_core.py::TestPath::test_path_check_invalid_http_method[3.0.0] tests/test_core.py::TestPlugins::test_plugin_factory tests/test_core.py::TestPlugins::test_plugin_schema_helper_is_used[True-2.0] tests/test_core.py::TestPlugins::test_plugin_schema_helper_is_used[True-3.0.0] tests/test_core.py::TestPlugins::test_plugin_schema_helper_is_used[False-2.0] tests/test_core.py::TestPlugins::test_plugin_schema_helper_is_used[False-3.0.0] tests/test_core.py::TestPlugins::test_plugin_parameter_helper_is_used[True-2.0] tests/test_core.py::TestPlugins::test_plugin_parameter_helper_is_used[True-3.0.0] tests/test_core.py::TestPlugins::test_plugin_parameter_helper_is_used[False-2.0] tests/test_core.py::TestPlugins::test_plugin_parameter_helper_is_used[False-3.0.0] tests/test_core.py::TestPlugins::test_plugin_response_helper_is_used[True-2.0] tests/test_core.py::TestPlugins::test_plugin_response_helper_is_used[True-3.0.0] tests/test_core.py::TestPlugins::test_plugin_response_helper_is_used[False-2.0] tests/test_core.py::TestPlugins::test_plugin_response_helper_is_used[False-3.0.0] tests/test_core.py::TestPlugins::test_plugin_path_helper_is_used[True-2.0] tests/test_core.py::TestPlugins::test_plugin_path_helper_is_used[True-3.0.0] tests/test_core.py::TestPlugins::test_plugin_path_helper_is_used[False-2.0] tests/test_core.py::TestPlugins::test_plugin_path_helper_is_used[False-3.0.0] tests/test_core.py::TestPlugins::test_plugin_operation_helper_is_used[2.0] tests/test_core.py::TestPlugins::test_plugin_operation_helper_is_used[3.0.0] tests/test_core.py::TestPluginsOrder::test_plugins_order tests/test_ext_marshmallow.py::TestDefinitionHelper::test_can_use_schema_as_definition[2.0-PetSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_can_use_schema_as_definition[2.0-schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_can_use_schema_as_definition[3.0.0-PetSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_can_use_schema_as_definition[3.0.0-schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_helper_without_schema[2.0] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_helper_without_schema[3.0.0] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_schema_dict_auto_reference[AnalysisSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_schema_dict_auto_reference[schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_schema_dict_auto_reference_in_list[AnalysisWithListSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_schema_dict_auto_reference_in_list[schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_schema_dict_auto_reference_return_none[AnalysisSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_schema_dict_auto_reference_return_none[schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_warning_when_schema_added_twice[2.0-AnalysisSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_warning_when_schema_added_twice[2.0-schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_warning_when_schema_added_twice[3.0.0-AnalysisSchema] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_warning_when_schema_added_twice[3.0.0-schema1] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_instances_with_different_modifiers_added[2.0] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_instances_with_different_modifiers_added[3.0.0] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_with_clashing_names[2.0] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_schema_with_clashing_names[3.0.0] tests/test_ext_marshmallow.py::TestDefinitionHelper::test_resolve_nested_schema_many_true_resolver_return_none tests/test_ext_marshmallow.py::TestComponentParameterHelper::test_can_use_schema_in_parameter[2.0-PetSchema] tests/test_ext_marshmallow.py::TestComponentParameterHelper::test_can_use_schema_in_parameter[2.0-schema1] tests/test_ext_marshmallow.py::TestComponentParameterHelper::test_can_use_schema_in_parameter[3.0.0-PetSchema] tests/test_ext_marshmallow.py::TestComponentParameterHelper::test_can_use_schema_in_parameter[3.0.0-schema1] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response[2.0-PetSchema] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response[2.0-schema1] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response[3.0.0-PetSchema] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response[3.0.0-schema1] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response_header[2.0-PetSchema] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response_header[2.0-schema1] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response_header[3.0.0-PetSchema] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_can_use_schema_in_response_header[3.0.0-schema1] tests/test_ext_marshmallow.py::TestComponentResponseHelper::test_content_without_schema[3.0.0] tests/test_ext_marshmallow.py::TestCustomField::test_can_use_custom_field_decorator[2.0] tests/test_ext_marshmallow.py::TestCustomField::test_can_use_custom_field_decorator[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v2[2.0-PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v2[2.0-pet_schema1] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v2[2.0-pet_schema2] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v2[2.0-tests.schemas.PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v3[3.0.0-PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v3[3.0.0-pet_schema1] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v3[3.0.0-pet_schema2] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_v3[3.0.0-tests.schemas.PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_expand_parameters_v2[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_expand_parameters_v3[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_uses_ref_if_available_v2[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_uses_ref_if_available_v3[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_uses_ref_if_available_name_resolver_returns_none_v2 tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_uses_ref_if_available_name_resolver_returns_none_v3 tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_name_resolver_returns_none_v2[PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_name_resolver_returns_none_v2[pet_schema1] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_name_resolver_returns_none_v2[tests.schemas.PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_name_resolver_returns_none_v3[PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_name_resolver_returns_none_v3[pet_schema1] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_name_resolver_returns_none_v3[tests.schemas.PetSchema] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_uses_ref_in_parameters_and_request_body_if_available_v2[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_uses_ref_in_parameters_and_request_body_if_available_v3[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_array_uses_ref_if_available_v2[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_array_uses_ref_if_available_v3[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_partially_v2[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_partially_v3[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_parameter_reference[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_parameter_reference[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_response_reference[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_response_reference[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_global_state_untouched_2json[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_global_state_untouched_2json[3.0.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_global_state_untouched_2parameters[2.0] tests/test_ext_marshmallow.py::TestOperationHelper::test_schema_global_state_untouched_2parameters[3.0.0] tests/test_ext_marshmallow.py::TestCircularReference::test_circular_referencing_schemas[2.0] tests/test_ext_marshmallow.py::TestCircularReference::test_circular_referencing_schemas[3.0.0] tests/test_ext_marshmallow.py::TestSelfReference::test_self_referencing_field_single[2.0] tests/test_ext_marshmallow.py::TestSelfReference::test_self_referencing_field_single[3.0.0] tests/test_ext_marshmallow.py::TestSelfReference::test_self_referencing_field_many[2.0] tests/test_ext_marshmallow.py::TestSelfReference::test_self_referencing_field_many[3.0.0] tests/test_ext_marshmallow.py::TestOrderedSchema::test_ordered_schema[2.0] tests/test_ext_marshmallow.py::TestOrderedSchema::test_ordered_schema[3.0.0] tests/test_ext_marshmallow.py::TestFieldWithCustomProps::test_field_with_custom_props[2.0] tests/test_ext_marshmallow.py::TestFieldWithCustomProps::test_field_with_custom_props[3.0.0] tests/test_ext_marshmallow.py::TestFieldWithCustomProps::test_field_with_custom_props_passed_as_snake_case[2.0] tests/test_ext_marshmallow.py::TestFieldWithCustomProps::test_field_with_custom_props_passed_as_snake_case[3.0.0] tests/test_ext_marshmallow.py::TestSchemaWithDefaultValues::test_schema_with_default_values[2.0] tests/test_ext_marshmallow.py::TestSchemaWithDefaultValues::test_schema_with_default_values[3.0.0] tests/test_ext_marshmallow.py::TestDictValues::test_dict_values_resolve_to_additional_properties[2.0] tests/test_ext_marshmallow.py::TestDictValues::test_dict_values_resolve_to_additional_properties[3.0.0] tests/test_ext_marshmallow.py::TestDictValues::test_dict_with_empty_values_field[2.0] tests/test_ext_marshmallow.py::TestDictValues::test_dict_with_empty_values_field[3.0.0] tests/test_ext_marshmallow.py::TestDictValues::test_dict_with_nested[2.0] tests/test_ext_marshmallow.py::TestDictValues::test_dict_with_nested[3.0.0] tests/test_ext_marshmallow.py::TestList::test_list_with_nested[2.0] tests/test_ext_marshmallow.py::TestList::test_list_with_nested[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowFieldToOpenAPI::test_fields_with_missing_load[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowFieldToOpenAPI::test_fields_with_missing_load[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowFieldToOpenAPI::test_fields_default_location_mapping_if_schema_many[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowFieldToOpenAPI::test_fields_with_dump_only[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowFieldToOpenAPI::test_fields_with_dump_only[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema2jsonschema_with_explicit_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema2jsonschema_with_explicit_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema2jsonschema_override_name[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema2jsonschema_override_name[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_required_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_required_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_partial[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_partial[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_no_required_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_no_required_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_title_and_description_may_be_added[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_title_and_description_may_be_added[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_excluded_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_excluded_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_only_explicitly_declared_fields_are_translated[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_only_explicitly_declared_fields_are_translated[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_observed_field_name_for_required_field[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_observed_field_name_for_required_field[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema_instance_inspection[2.0-True] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema_instance_inspection[2.0-False] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema_instance_inspection[3.0.0-True] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_schema_instance_inspection[3.0.0-False] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_raises_error_if_no_declared_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToModelDefinition::test_raises_error_if_no_declared_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_field_multiple[2.0-List] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_field_multiple[2.0-CustomList] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_field_multiple[3.0.0-List] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_field_multiple[3.0.0-CustomList] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_field_required[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_field_required[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_body[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_body_with_dump_only[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_body_many[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_query[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_query[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_query_instance[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_query_instance[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_query_instance_many_should_raise_exception[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_schema_query_instance_many_should_raise_exception[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_fields_query[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_fields_query[3.0.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_raises_error_if_not_a_schema[2.0] tests/test_ext_marshmallow_openapi.py::TestMarshmallowSchemaToParameters::test_raises_error_if_not_a_schema[3.0.0] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields_only_exclude[2.0-only] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields_only_exclude[2.0-exclude] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields_only_exclude[3.0.0-only] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields_only_exclude[3.0.0-exclude] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields_with_adhoc_changes[2.0] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_fields_with_adhoc_changes[3.0.0] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_excluded_fields[2.0] tests/test_ext_marshmallow_openapi.py::TestNesting::test_schema2jsonschema_with_nested_excluded_fields[3.0.0] tests/test_ext_marshmallow_openapi.py::test_openapi_tools_validate_v2 tests/test_ext_marshmallow_openapi.py::test_openapi_tools_validate_v3 tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-range-properties0] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-multiple_ranges-properties1] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-list_length-properties2] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-custom_list_length-properties3] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-string_length-properties4] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-custom_field_length-properties5] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-multiple_lengths-properties6] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[2.0-equal_length-properties7] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-range-properties0] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-multiple_ranges-properties1] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-list_length-properties2] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-custom_list_length-properties3] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-string_length-properties4] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-custom_field_length-properties5] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-multiple_lengths-properties6] tests/test_ext_marshmallow_openapi.py::TestFieldValidation::test_properties[3.0.0-equal_length-properties7]
src/apispec/ext/marshmallow/schema_resolver.py src/apispec/ext/marshmallow/common.py src/apispec/core.py src/apispec/ext/marshmallow/openapi.py
src/apispec/ext/marshmallow/schema_resolver.py src/apispec/ext/marshmallow/common.py src/apispec/core.py src/apispec/ext/marshmallow/openapi.py