# Testing
The Excel facade can be faked to make assertions without actually writing spreadsheet files.
# Faking the facade
Excel::fake();
1
# Testing downloads
public function test_user_can_download_invoices_export()
{
Excel::fake();
$this->actingAs($this->givenUser())
->get('/invoices/download/xlsx');
Excel::assertDownloaded('filename.xlsx', function(InvoicesExport $export) {
// Assert that the correct export is downloaded.
return $export->collection()->contains('#2018-01');
});
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# Testing storing exports
public function test_user_can_store_invoices_export()
{
Excel::fake();
$this->actingAs($this->givenUser())
->get('/invoices/store/xlsx');
Excel::assertStored('filename.xlsx', 'diskName');
Excel::assertStored('filename.xlsx', 'diskName', function(InvoicesExport $export) {
return true;
});
// When passing the callback as 2nd param, the disk will be the default disk.
Excel::assertStored('filename.xlsx', function(InvoicesExport $export) {
return true;
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Testing exports with dynamic file name/path
If you have dynamic naming for files or paths, you can use a regular expression to represent those while testing:
public function test_user_can_store_invoices_export()
{
Excel::fake();
$this->actingAs($this->givenUser())
->get('/invoices/store/xlsx');
// Tells the mock to use regular expressions
Excel::matchByRegex();
// For a given dynamic named file 'invoices_2019.xlsx'
Excel::assertStored('/invoices_\d{4}\.xlsx/', 'diskName');
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
Please note that your expression must match only one file/path. If more than one match is found, the test will fail.
Call doNotMatchByRegex() to switch back to exact string matching:
Excel::doNotMatchByRegex();
1
# Testing raw exports
Use assertExportedInRaw to verify that Excel::raw() was called with a specific export class:
Excel::fake();
Excel::raw(new InvoicesExport, Excel::XLSX);
Excel::assertExportedInRaw(InvoicesExport::class, function (InvoicesExport $export) {
return $export->collection()->contains('#2018-01');
});
1
2
3
4
5
6
7
2
3
4
5
6
7
# Testing queued exports with a job chain
Use assertQueuedWithChain to assert that a queued export had specific jobs chained onto it:
Excel::fake();
(new InvoicesExport)->queue('invoices.xlsx')->chain([
new NotifyUserJob,
]);
Excel::assertQueuedWithChain([
new NotifyUserJob,
]);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9