我正在将Codeception与wpbrowser一起使用来测试类,但是无法测试类的对象实例。
错误是在null上调用成员函数funcName(在代码接收CLI中以红色显示)。它仅在测试对象时发生。静态方法测试有效/通过。
谁知道这是什么原因?
class A {
public function run() {
return 'run fired';
}
public static function runStatic() {
return 'run static';
}
}
$a = new A();
class AjaxResponderTest extends \Codeception\TestCase\WPTestCase {
public function setUp(): void {
parent::setUp();
}
public function tearDown(): void {
parent::tearDown();
}
public function testA() {
global $a;
$result = $a->run();
// [Error] Call to a member function run() on null
$this->assertEquals('run fired', $result);
}
public function testAStatic() {
$this->assertEquals('run static', A::runStatic()); // test passes
}
}
复制@Mike Foxtech的测试类,在控制台中出现以下错误:
1) AjaxResponderTest: A
Test tests/wpunit/AjaxResponderTest.php:testA
[PHPUnit\Framework\Exception] array_merge(): Argument #1 is not an array
#1 Codeception\Subscriber\ErrorHandler->errorHandler
---------
2) AjaxResponderTest: A static
Test tests/wpunit/AjaxResponderTest.php:testAStatic
[PHPUnit\Framework\Exception] array_merge(): Argument #1 is not an array
#1 Codeception\Subscriber\ErrorHandler->errorHandler
ERRORS!
Tests: 2, Assertions: 0, Errors: 2.
答案 0 :(得分:1)
为什么要使用全局变量?是出于特定原因吗?通常最好避免使用全局变量。
无论如何,我对Codeception并不熟悉,但是很明显,在测试运行时,变量$ a没有值。 我将类实例化移动到setUp()函数,而不是在测试之外。
答案 1 :(得分:0)
尝试
location ~ \.php$ {
[...]
fastcgi_param HTTPS on;