diff --git a/modules/field/tests/field.test b/modules/field/tests/field.test
index 1e59315..cdc4f3f 100644
--- a/modules/field/tests/field.test
+++ b/modules/field/tests/field.test
@@ -2522,6 +2522,59 @@ class FieldCrudTestCase extends FieldTestCase {
   }
 
   /**
+   * Test changing a field's schema using field_update_field().
+   */
+  function testFieldSchemaUpdate() {
+    $schema = Database::getConnection()->schema();
+
+    // Create a test field.
+    $field_definition = array(
+      'field_name' => 'test',
+      'type' => 'test_field',
+    );
+    field_create_field($field_definition);
+
+    $this->assertTrue($schema->tableExists('field_data_test'));
+    $this->assertTrue($schema->fieldExists('field_data_test', 'test_value'));
+    $this->assertTrue($schema->indexExists('field_data_test', 'test_value'));
+    $this->assertFalse($schema->fieldExists('field_data_test', 'test_value2'));
+    $this->assertFalse($schema->indexExists('field_data_test', 'test_value2'));
+
+    // Register an additional column and index for field_test_field_schema().
+    variable_set('field_test_field_schema_override', array(
+      'columns' => array(
+        'value2' => array(
+          'type' => 'int',
+          'size' => 'medium',
+          'not null' => FALSE,
+        ),
+      ),
+      'indexes' => array(
+        'value2' => array('value2'),
+      ),
+    ));
+
+    // Update the field, which should add the new value2 column and index.
+    field_update_field($field_definition);
+    $this->assertTrue($schema->tableExists('field_data_test'));
+    $this->assertTrue($schema->fieldExists('field_data_test', 'test_value'));
+    $this->assertTrue($schema->indexExists('field_data_test', 'test_value'));
+    $this->assertTrue($schema->fieldExists('field_data_test', 'test_value2'));
+    $this->assertTrue($schema->indexExists('field_data_test', 'test_value2'));
+
+    // Unregister the additional value2 column and index.
+    variable_del('field_test_field_schema_override');
+
+    // Update the field, which should now remove the value2 column and index.
+    field_update_field($field_definition);
+    $this->assertTrue($schema->tableExists('field_data_test'));
+    $this->assertTrue($schema->fieldExists('field_data_test', 'test_value'));
+    $this->assertTrue($schema->indexExists('field_data_test', 'test_value'));
+    $this->assertFalse($schema->fieldExists('field_data_test', 'test_value2'));
+    $this->assertFalse($schema->indexExists('field_data_test', 'test_value2'));
+  }
+
+  /**
    * Test the deletion of a field.
    */
   function testDeleteField() {
diff --git a/modules/field/tests/field_test.install b/modules/field/tests/field_test.install
index eaf1390..a1c6ecb 100644
--- a/modules/field/tests/field_test.install
+++ b/modules/field/tests/field_test.install
@@ -118,7 +118,7 @@ function field_test_schema() {
  */
 function field_test_field_schema($field) {
   if ($field['type'] == 'test_field') {
-    return array(
+    $schema = array(
       'columns' => array(
         'value' => array(
           'type' => 'int',
@@ -130,6 +130,10 @@ function field_test_field_schema($field) {
         'value' => array('value'),
       ),
     );
+    if ($override = variable_get('field_test_field_schema_override', array())) {
+      $schema = drupal_array_merge_deep($override, $schema);
+    }
+    return $schema;
   }
   else {
     $foreign_keys = array();
