有可能嘲笑"要求"或" require_once"与卡兰的声明?

时间:2017-08-21 10:06:38

标签: php unit-testing

我有很旧的遗留代码。在开始重构之前,我想对代码进行一些单元测试。但糟糕的是,文件依赖于" require_once"陈述(hovewer,我要测试的功能是孤立的)。

如果我无法模拟" require_once"那么我就无法编写正常的测试。言。

我使用Kahlan框架进行测试。那么有可能模仿这样的陈述吗?如果是,那怎么样?

1 个答案:

答案 0 :(得分:1)

这是不可能的。

然而,我已经为Kahlan制作了一个插件,允许"提取"来自任何文件的函数并跳过所有其他代码。它不会允许完全"模拟"语句,但它将允许测试孤立的函数。我做了拉取请求,如果它不被接受,我将制作一个单独的包装作曲家包并更新这个答案。

可以在此处找到更改:

https://github.com/lamp-of-god/kahlan/tree/isolator-plugin

使用示例:

文件:

<?php
require_once 'something';  // This string will be "skipped" on test

do_something();  // This string too

function test()
{
    return 42;
}

使用插件测试此文件:

<?php

use Kahlan\Plugin\Isolator;

Isolator::isolate(dirname(__DIR__).'/../test.php');

describe('test()', function() {
    it('returns 42', function() {
        expect(test())->toBe(42);
    });
});