luyadev/luya-testsuite

LUYA模块和组件的测试用例和数据。让测试更轻松。

安装次数: 70,362

依赖项: 76

建议者: 0

安全: 0

星星: 6

关注者: 7

分支: 7

类型:luya-core

3.1.4 2023-08-31 12:19 UTC

README

Build Status Test Coverage Total Downloads Latest Stable Version Join the chat at https://gitter.im/luyadev/luya

提供PHPUnit测试用例和内置Web服务器以测试您的应用程序、模块、组件、API或类。

包含什么?

测试用例

  • Web应用程序测试用例
  • 控制台应用程序测试用例
  • 服务器(用于API)测试用例
  • CMS块测试用例
  • NgRest测试用例(用于模型、控制器和API)

特性

  • 消息文件比较特性
  • 迁移文件检查特性

固定值

  • ActiveRecord固定值在加载时根据数组或规则定义创建表。

查看完整文档

安装

luyadev/luya-testsuite包添加到您的composer.json文件的require-dev部分

composer require luyadev/luya-testsuite --dev

在您的应用程序文件夹内创建一个新的文件夹tests并创建测试类

namespace app\tests;

use Yii;

class MyTest extends \luya\testsuite\cases\WebApplicationTestCase
{
    public function getConfigArray()
    {
        return [
            'id' => 'mytestapp',
            'basePath' => dirname(__DIR__),
        ];
    }
    
    public function testInstance()
    {
        // add your phpunit tests here, like:
        $this->assertInstanceOf('luya\web\Application', Yii::$app);
        $this->assertInstanceOf('luya\base\Boot', $this->boot);
        $this->assertInstanceOf('luya\web\Application', $this->app);
    }
}

要运行单元测试(假设您的测试在tests/目录中),在终端中运行

./vendor/bin/phpunit tests/

为了支持sqlite固定值安装

sudo apt-get install php-sqlite3 

示例测试用例

一些示例,说明如何在不同场景下使用LUYA测试套件。

测试API和应用程序

当与API或客户网站一起工作时,有时您只想测试网站本身,响应是什么,我的更新后所有页面是否仍然正常工作?因此我们有luya\testsuite\cases\ServerTestCase

此示例将在PHP Web服务器中运行您的LUYA应用程序并测试一组给定页面的响应状态码或内容。要运行此示例,在tests文件夹中创建一个MyWebsiteTest.php文件。

namespace app\tests;

class MyWebsiteTest extends ServerTestCase
{
   public function getConfigArray()
   {
      return [
          'id' => 'mytestapp',
          'basePath' => dirname(__DIR__),
      ];
  }
  
  public function testSites()
  {
      $this->assertUrlHomepageIsOk(); // checks the root url like: http://localhost/mywebsite.com
      $this->assertUrlIsOk('about'); // checks: http://localhost/mywebsite.com/about
      $this->assertUrlGetResponseContains('about/me', 'Hello World'); // checks: http://localhost/mywebsite.com/about/me
      $this->assertUrlIsError('errorpage'); // checks: http://localhost/mywebsite.com/errorpage
  }
}

由于Web服务器进程可能运行在不同的权限级别,您必须确保assets/runtime文件夹具有所需的权限。

控制器函数测试

我们使用如PHPUnit中所示的多处示例中的getMockBuilder()来设置DefaultController并断言注册的模块addressbook。为了测试由数据库错误引起的运行时异常,我们使用模拟的method函数

public function testActionIndex()
{
    $module = Yii::$app->getModule('addressbook');
    
    $this->assertInstanceOf('luya\addressbook\frontend\Module', $module);
    $mock = $this->getMockBuilder(DefaultController::class)
        ->setConstructorArgs(["id" => "default", "module" => $module])
        ->getMock();
        
    $mock->method("actionIndex");
}