Uncategorized

How to write a PHPUnit functional test for Drupal 8

Step 1: Create a Fixture

To quote the PHPUnit manual:

One of the most time-consuming parts of writing tests is writing the code to set the world up in a known state and then return it to its original state when the test is complete. This known state is called the fixture of the test.

In the case of testing a Drupal migration, the fixture is a database agnostic[1] representation of the data source to be migrated. According to the convention set out in core, the file should be created in the following location: modules/[module_name]/tests/fixtures and the file name should reference the version of Drupal core to which it applies, e.g. drupal7.php. It mainly consists of createTable() and insert() commands that form the dataset.

The db-tools.php command line application can be used to automate the creation of a fixture file. This was used in core to create the fixture files for the migrate_drupal module. To find out more, I recommend reading the drupal.org article entitled Generating database fixtures for D8 Migrate tests.

Alternatively you can write the fixture file manually – if doing so, core/modules/migrate_drupal/tests/fixtures/drupal7.php is a good point of reference.

Here is an (admittedly convoluted) example of a fixture file:


/**
 * @file
 * A database agnostic dump for testing purposes.
 */
    
use Drupal\Core\Database\Database;
    
$connection = Database::getConnection();
    
$connection->schema()->createTable('example', array(
  'fields' => array(
  'id' => array(
    'type' => 'serial',
    'not null' => TRUE,
   ),
   'name' => array(
     'type' => 'varchar',
     'not null' => TRUE,
     'length' => '255',
     'default' => '',
    ),
    'weight' => array(
       'type' => 'int',
        'not null' => TRUE,
        'default' => '0',
      ),
    ),
    'primary key' => array(
       'id',
     ),
    'mysql_character_set' => 'utf8',
));
    
$connection->insert('example')
->fields(array(
  'id',
  'name',
  'weight',
))
->values(array(
   'id' => '1',
   'name' => 'General discussion',
   'weight' => '2',
))
->values(array(
   'id' => '2',
   'name' => 'Term1',
   'weight' => '0',
))
->execute();

The snippet above creates one table (example) containing 3 fields (id, name, weight) and then inserts two records into it. Depending on the complexity of the test, a fixture file could include any number of tables each containing enough rows to cater for each facet that needs to be tested.

Step 2: Create the test file

This is the file that will contain the method to set up and run the test(s).

The file structure of test files is important, our example would be created in modules/[module_name]/tests/src/Kernel/Migrate/d7. It is located in the Kernel directory because it is a functional test – this is explained in more details in the drupal.org Automated tests article. It is then organised into the Migrate directory (obviously because it is a migration test). For more details on the location of test files read the drupal.org article on PHPUnit file structure, namespace, and required metadata.

The file name (and contained class) should end in “Test” and for migration tests should begin with “Migrate” (according to Drupal core convention). In our example the file will be called MigrateExampleTest.php and will initially contain the following:


namespace Drupal\Tests\example\Kernel\Migrate\d7;
    
use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
    
/**
 * Tests 'example' migration.
 *
 * @group example
 */
class MigrateExampleTest extends MigrateDrupalTestBase {
    
  static $modules = ['example'];
    
  /**
   * {@inheritdoc}
   */
   protected function setUp() {
      parent::setUp();
   }
    
  /**
   * Test 'example' migration from Drupal 7 to 8.
   */
   public function testExample() {
        
   }
}

The class name should match the file name, in this case MigrateExampleTest. A straightforward test class should extend MigrateDrupalTestBase, but a more complicated test class could extend MigrateDrupal7TestBase which provides access to the migrate_drupal fixture including a well-populated database.

 

 

Bitcoin Blogs 4001
Bitcoin Blogs 4002
Bitcoin Blogs 4003
Bitcoin Blogs 4004
Bitcoin Blogs 4005
Bitcoin Blogs 4006
Bitcoin Blogs 4007
Bitcoin Blogs 4008
Bitcoin Blogs 4009
Bitcoin Blogs 4010
Bitcoin Blogs 4011
Bitcoin Blogs 4012
Bitcoin Blogs 4013
Bitcoin Blogs 4014
Bitcoin Blogs 4015
Bitcoin Blogs 4016
Bitcoin Blogs 4017
Bitcoin Blogs 4018
Bitcoin Blogs 4019
Bitcoin Blogs 4020
Bitcoin Blogs 4021
Bitcoin Blogs 4022
Bitcoin Blogs 4023
Bitcoin Blogs 4024
Bitcoin Blogs 4025
Bitcoin Blogs 4026
Bitcoin Blogs 4027
Bitcoin Blogs 4028
Bitcoin Blogs 4029
Bitcoin Blogs 4030
Bitcoin Blogs 4031
Bitcoin Blogs 4032
Bitcoin Blogs 4033
Bitcoin Blogs 4034
Bitcoin Blogs 4035
Bitcoin Blogs 4036
Bitcoin Blogs 4037
Bitcoin Blogs 4038
Bitcoin Blogs 4039
Bitcoin Blogs 4040
Bitcoin Blogs 4041
Bitcoin Blogs 4042
Bitcoin Blogs 4043
Bitcoin Blogs 4044
Bitcoin Blogs 4045
Bitcoin Blogs 4046
Bitcoin Blogs 4047
Bitcoin Blogs 4048
Bitcoin Blogs 4049
Bitcoin Blogs 4050
Bitcoin Blogs 4051
Bitcoin Blogs 4052
Bitcoin Blogs 4053
Bitcoin Blogs 4054
Bitcoin Blogs 4055
Bitcoin Blogs 4056
Bitcoin Blogs 4057
Bitcoin Blogs 4058
Bitcoin Blogs 4059
Bitcoin Blogs 4060
Bitcoin Blogs 4061
Bitcoin Blogs 4062
Bitcoin Blogs 4063
Bitcoin Blogs 4064
Bitcoin Blogs 4065
Bitcoin Blogs 4066
Bitcoin Blogs 4067
Bitcoin Blogs 4068
Bitcoin Blogs 4069
Bitcoin Blogs 4070
Bitcoin Blogs 4071
Bitcoin Blogs 4072
Bitcoin Blogs 4073
Bitcoin Blogs 4074
Bitcoin Blogs 4075
Bitcoin Blogs 4076
Bitcoin Blogs 4077
Bitcoin Blogs 4078
Bitcoin Blogs 4079
Bitcoin Blogs 4080
Bitcoin Blogs 4081
Bitcoin Blogs 4082
Bitcoin Blogs 4083
Bitcoin Blogs 4084
Bitcoin Blogs 4085
Bitcoin Blogs 4086
Bitcoin Blogs 4087
Bitcoin Blogs 4088
Bitcoin Blogs 4089
Bitcoin Blogs 4090
Bitcoin Blogs 4091
Bitcoin Blogs 4092
Bitcoin Blogs 4093
Bitcoin Blogs 4094
Bitcoin Blogs 4095
Bitcoin Blogs 4096
Bitcoin Blogs 4097
Bitcoin Blogs 4098
Bitcoin Blogs 4099
Bitcoin Blogs 4100
Bitcoin Blogs 4101
Bitcoin Blogs 4102
Bitcoin Blogs 4103
Bitcoin Blogs 4104
Bitcoin Blogs 4105
Bitcoin Blogs 4106
Bitcoin Blogs 4107
Bitcoin Blogs 4108
Bitcoin Blogs 4109
Bitcoin Blogs 4110
Bitcoin Blogs 4111
Bitcoin Blogs 4112
Bitcoin Blogs 4113
Bitcoin Blogs 4114
Bitcoin Blogs 4115
Bitcoin Blogs 4116
Bitcoin Blogs 4117
Bitcoin Blogs 4118
Bitcoin Blogs 4119
Bitcoin Blogs 4120
Bitcoin Blogs 4121
Bitcoin Blogs 4122
Bitcoin Blogs 4123
Bitcoin Blogs 4124
Bitcoin Blogs 4125
Bitcoin Blogs 4126
Bitcoin Blogs 4127
Bitcoin Blogs 4128
Bitcoin Blogs 4129
Bitcoin Blogs 4130
Bitcoin Blogs 4131
Bitcoin Blogs 4132
Bitcoin Blogs 4133
Bitcoin Blogs 4134
Bitcoin Blogs 4135
Bitcoin Blogs 4136
Bitcoin Blogs 4137
Bitcoin Blogs 4138
Bitcoin Blogs 4139
Bitcoin Blogs 4140
Bitcoin Blogs 4141
Bitcoin Blogs 4142
Bitcoin Blogs 4143
Bitcoin Blogs 4144
Bitcoin Blogs 4145
Bitcoin Blogs 4146
Bitcoin Blogs 4147
Bitcoin Blogs 4148
Bitcoin Blogs 4149
Bitcoin Blogs 4150
Bitcoin Blogs 4151
Bitcoin Blogs 4152
Bitcoin Blogs 4153
Bitcoin Blogs 4154
Bitcoin Blogs 4155
Bitcoin Blogs 4156
Bitcoin Blogs 4157
Bitcoin Blogs 4158
Bitcoin Blogs 4159
Bitcoin Blogs 4160
Bitcoin Blogs 4161
Bitcoin Blogs 4162
Bitcoin Blogs 4163
Bitcoin Blogs 4164
Bitcoin Blogs 4165
Bitcoin Blogs 4166
Bitcoin Blogs 4167
Bitcoin Blogs 4168
Bitcoin Blogs 4169
Bitcoin Blogs 4170
Bitcoin Blogs 4171
Bitcoin Blogs 4172
Bitcoin Blogs 4173
Bitcoin Blogs 4174
Bitcoin Blogs 4175
Bitcoin Blogs 4176
Bitcoin Blogs 4177
Bitcoin Blogs 4178
Bitcoin Blogs 4179
Bitcoin Blogs 4180
Bitcoin Blogs 4181
Bitcoin Blogs 4182
Bitcoin Blogs 4183
Bitcoin Blogs 4184
Bitcoin Blogs 4185
Bitcoin Blogs 4186
Bitcoin Blogs 4187
Bitcoin Blogs 4188
Bitcoin Blogs 4189
Bitcoin Blogs 4190
Bitcoin Blogs 4191
Bitcoin Blogs 4192
Bitcoin Blogs 4193
Bitcoin Blogs 4194
Bitcoin Blogs 4195
Bitcoin Blogs 4196
Bitcoin Blogs 4197
Bitcoin Blogs 4198
Bitcoin Blogs 4199
Bitcoin Blogs 4200
Bitcoin Blogs 4201
Bitcoin Blogs 4202
Bitcoin Blogs 4203
Bitcoin Blogs 4204
Bitcoin Blogs 4205
Bitcoin Blogs 4206
Bitcoin Blogs 4207
Bitcoin Blogs 4208
Bitcoin Blogs 4209
Bitcoin Blogs 4210
Bitcoin Blogs 4211
Bitcoin Blogs 4212
Bitcoin Blogs 4213
Bitcoin Blogs 4214
Bitcoin Blogs 4215
Bitcoin Blogs 4216
Bitcoin Blogs 4217
Bitcoin Blogs 4218
Bitcoin Blogs 4219
Bitcoin Blogs 4220
Bitcoin Blogs 4221
Bitcoin Blogs 4222
Bitcoin Blogs 4223
Bitcoin Blogs 4224
Bitcoin Blogs 4225
Bitcoin Blogs 4226
Bitcoin Blogs 4227
Bitcoin Blogs 4228
Bitcoin Blogs 4229
Bitcoin Blogs 4230
Bitcoin Blogs 4231
Bitcoin Blogs 4232
Bitcoin Blogs 4233
Bitcoin Blogs 4234
Bitcoin Blogs 4235
Bitcoin Blogs 4236
Bitcoin Blogs 4237
Bitcoin Blogs 4238
Bitcoin Blogs 4239
Bitcoin Blogs 4240
Bitcoin Blogs 4241
Bitcoin Blogs 4242
Bitcoin Blogs 4243
Bitcoin Blogs 4244
Bitcoin Blogs 4245
Bitcoin Blogs 4246
Bitcoin Blogs 4247
Bitcoin Blogs 4248
Bitcoin Blogs 4249
Bitcoin Blogs 4250
Bitcoin Blogs 4251
Bitcoin Blogs 4252
Bitcoin Blogs 4253
Bitcoin Blogs 4254
Bitcoin Blogs 4255
Bitcoin Blogs 4256
Bitcoin Blogs 4257
Bitcoin Blogs 4258
Bitcoin Blogs 4259
Bitcoin Blogs 4260
Bitcoin Blogs 4261
Bitcoin Blogs 4262
Bitcoin Blogs 4263
Bitcoin Blogs 4264
Bitcoin Blogs 4265
Bitcoin Blogs 4266
Bitcoin Blogs 4267
Bitcoin Blogs 4268
Bitcoin Blogs 4269
Bitcoin Blogs 4270
Bitcoin Blogs 4271
Bitcoin Blogs 4272
Bitcoin Blogs 4273
Bitcoin Blogs 4274
Bitcoin Blogs 4275
Bitcoin Blogs 4276
Bitcoin Blogs 4277
Bitcoin Blogs 4278
Bitcoin Blogs 4279
Bitcoin Blogs 4280
Bitcoin Blogs 4281
Bitcoin Blogs 4282
Bitcoin Blogs 4283
Bitcoin Blogs 4284
Bitcoin Blogs 4285
Bitcoin Blogs 4286
Bitcoin Blogs 4287
Bitcoin Blogs 4288
Bitcoin Blogs 4289
Bitcoin Blogs 4290
Bitcoin Blogs 4291
Bitcoin Blogs 4292
Bitcoin Blogs 4293
Bitcoin Blogs 4294
Bitcoin Blogs 4295
Bitcoin Blogs 4296
Bitcoin Blogs 4297
Bitcoin Blogs 4298
Bitcoin Blogs 4299
Bitcoin Blogs 4300
Bitcoin Blogs 4301
Bitcoin Blogs 4302
Bitcoin Blogs 4303
Bitcoin Blogs 4304
Bitcoin Blogs 4305
Bitcoin Blogs 4306
Bitcoin Blogs 4307
Bitcoin Blogs 4308
Bitcoin Blogs 4309
Bitcoin Blogs 4310
Bitcoin Blogs 4311
Bitcoin Blogs 4312
Bitcoin Blogs 4313
Bitcoin Blogs 4314
Bitcoin Blogs 4315
Bitcoin Blogs 4316
Bitcoin Blogs 4317
Bitcoin Blogs 4318
Bitcoin Blogs 4319
Bitcoin Blogs 4320
Bitcoin Blogs 4321
Bitcoin Blogs 4322
Bitcoin Blogs 4323
Bitcoin Blogs 4324
Bitcoin Blogs 4325
Bitcoin Blogs 4326
Bitcoin Blogs 4327
Bitcoin Blogs 4328
Bitcoin Blogs 4329
Bitcoin Blogs 4330
Bitcoin Blogs 4331
Bitcoin Blogs 4332
Bitcoin Blogs 4333
Bitcoin Blogs 4334
Bitcoin Blogs 4335
Bitcoin Blogs 4336
Bitcoin Blogs 4337
Bitcoin Blogs 4338
Bitcoin Blogs 4339
Bitcoin Blogs 4340
Bitcoin Blogs 4341
Bitcoin Blogs 4342
Bitcoin Blogs 4343
Bitcoin Blogs 4344
Bitcoin Blogs 4345
Bitcoin Blogs 4346
Bitcoin Blogs 4347
Bitcoin Blogs 4348
Bitcoin Blogs 4349
Bitcoin Blogs 4350
Bitcoin Blogs 4351
Bitcoin Blogs 4352
Bitcoin Blogs 4353
Bitcoin Blogs 4354
Bitcoin Blogs 4355
Bitcoin Blogs 4356
Bitcoin Blogs 4357
Bitcoin Blogs 4358
Bitcoin Blogs 4359
Bitcoin Blogs 4360
Bitcoin Blogs 4361
Bitcoin Blogs 4362
Bitcoin Blogs 4363
Bitcoin Blogs 4364
Bitcoin Blogs 4365
Bitcoin Blogs 4366
Bitcoin Blogs 4367
Bitcoin Blogs 4368
Bitcoin Blogs 4369
Bitcoin Blogs 4370
Bitcoin Blogs 4371
Bitcoin Blogs 4372
Bitcoin Blogs 4373
Bitcoin Blogs 4374
Bitcoin Blogs 4375
Bitcoin Blogs 4376
Bitcoin Blogs 4377
Bitcoin Blogs 4378
Bitcoin Blogs 4379
Bitcoin Blogs 4380
Bitcoin Blogs 4381
Bitcoin Blogs 4382
Bitcoin Blogs 4383
Bitcoin Blogs 4384
Bitcoin Blogs 4385
Bitcoin Blogs 4386
Bitcoin Blogs 4387
Bitcoin Blogs 4388
Bitcoin Blogs 4389
Bitcoin Blogs 4390
Bitcoin Blogs 4391
Bitcoin Blogs 4392
Bitcoin Blogs 4393
Bitcoin Blogs 4394
Bitcoin Blogs 4395
Bitcoin Blogs 4396
Bitcoin Blogs 4397
Bitcoin Blogs 4398
Bitcoin Blogs 4399
Bitcoin Blogs 4400
Bitcoin Blogs 4401
Bitcoin Blogs 4402
Bitcoin Blogs 4403
Bitcoin Blogs 4404
Bitcoin Blogs 4405
Bitcoin Blogs 4406
Bitcoin Blogs 4407
Bitcoin Blogs 4408
Bitcoin Blogs 4409
Bitcoin Blogs 4410
Bitcoin Blogs 4411
Bitcoin Blogs 4412
Bitcoin Blogs 4413
Bitcoin Blogs 4414
Bitcoin Blogs 4415
Bitcoin Blogs 4416
Bitcoin Blogs 4417
Bitcoin Blogs 4418
Bitcoin Blogs 4419
Bitcoin Blogs 4420
Bitcoin Blogs 4421
Bitcoin Blogs 4422
Bitcoin Blogs 4423
Bitcoin Blogs 4424
Bitcoin Blogs 4425
Bitcoin Blogs 4426
Bitcoin Blogs 4427
Bitcoin Blogs 4428
Bitcoin Blogs 4429
Bitcoin Blogs 4430
Bitcoin Blogs 4431
Bitcoin Blogs 4432
Bitcoin Blogs 4433
Bitcoin Blogs 4434
Bitcoin Blogs 4435
Bitcoin Blogs 4436
Bitcoin Blogs 4437
Bitcoin Blogs 4438
Bitcoin Blogs 4439
Bitcoin Blogs 4440
Bitcoin Blogs 4441
Bitcoin Blogs 4442
Bitcoin Blogs 4443
Bitcoin Blogs 4444
Bitcoin Blogs 4445
Bitcoin Blogs 4446
Bitcoin Blogs 4447
Bitcoin Blogs 4448
Bitcoin Blogs 4449
Bitcoin Blogs 4450
Bitcoin Blogs 4451
Bitcoin Blogs 4452
Bitcoin Blogs 4453
Bitcoin Blogs 4454
Bitcoin Blogs 4455
Bitcoin Blogs 4456
Bitcoin Blogs 4457
Bitcoin Blogs 4458
Bitcoin Blogs 4459
Bitcoin Blogs 4460
Bitcoin Blogs 4461
Bitcoin Blogs 4462
Bitcoin Blogs 4463
Bitcoin Blogs 4464
Bitcoin Blogs 4465
Bitcoin Blogs 4466
Bitcoin Blogs 4467
Bitcoin Blogs 4468
Bitcoin Blogs 4469
Bitcoin Blogs 4470
Bitcoin Blogs 4471
Bitcoin Blogs 4472
Bitcoin Blogs 4473
Bitcoin Blogs 4474
Bitcoin Blogs 4475
Bitcoin Blogs 4476
Bitcoin Blogs 4477
Bitcoin Blogs 4478
Bitcoin Blogs 4479
Bitcoin Blogs 4480
Bitcoin Blogs 4481
Bitcoin Blogs 4482
Bitcoin Blogs 4483
Bitcoin Blogs 4484
Bitcoin Blogs 4485
Bitcoin Blogs 4486
Bitcoin Blogs 4487
Bitcoin Blogs 4488
Bitcoin Blogs 4489
Bitcoin Blogs 4490
Bitcoin Blogs 4491
Bitcoin Blogs 4492
Bitcoin Blogs 4493
Bitcoin Blogs 4494
Bitcoin Blogs 4495
Bitcoin Blogs 4496
Bitcoin Blogs 4497
Bitcoin Blogs 4498
Bitcoin Blogs 4499
Bitcoin Blogs 4500

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button