


Yii Framework Official Guide Series 38 - Defining Specific States (Fixtures)
Automated tests need to be executed many times. In order to ensure that the test process is repeatable, we really want to test in some known states , this state we call Specific state. For example, when testing the article creation feature in a blog application, every time we perform the test, the table related to the article (for example. Post
table, Comment
table) should be restored to a specific state. The PHPUnit documentation has a good description of the general construction of a specific state. This section mainly introduces how to create a specific state like the example just described. In this way, you can build a specific state of the database.
Setting the specific state of building the database is probably one of the most time-consuming parts of testing applications with database backend support. The CBbFixtureManager application component introduced by Yii can effectively alleviate this problem. One question. When running a set of tests, it basically does the following:
Before all tests are run, it resets the test-related data to a knowable state.
Before a single test is run, it resets specific tables to a knowable state.
During the execution of a test method, it provides An access interface that provides row data in a specific state.
Please use the CDbFixtureManager we configured in the application configuration as follows.
return array( 'components'=>array( 'fixture'=>array( 'class'=>'system.test.CDbFixtureManager', ), ), );
Then we provide a specific state data under the directory protected/tests/fixtures
. This directory can be configured by CDbFixtureManager::basePath in the application configuration file Properties are specified as other directories. State-specific data is composed of multiple PHP files called state-specific files. Each state-specific file returns an array representing the initial row of a specific table of data. The file name is the same as the table name. .The following is an example of storing specific status data of the Post
table in a file named Post.php
.
<?php return array( 'sample1'=>array( 'title'=>'test post 1', 'content'=>'test post content 1', 'createTime'=>1230952187, 'authorId'=>1, ), 'sample2'=>array( 'title'=>'test post 2', 'content'=>'test post content 2', 'createTime'=>1230952287, 'authorId'=>1, ), );
As we can see, the above returns two rows of data. Each row represents an array, the key of which is the field name of the table, and the value of which is the corresponding field value. Each row represents an array. The row indices are all strings called row alias (for example: simple1
, simple2
). Later when we write the test script, we This row of data can be conveniently called by its alias. We will cover this in detail in the next section.
You may have noticed that we did not specify the id
field in the above specific state Value. This is because the id
field has been defined as an auto-incrementing primary key, and its value will also be automatically generated when we insert new data.
When CDbFixtureManager is referenced for the first time , it goes through all the specific state files and uses them to reset the corresponding table. It does this by clearing the table, resetting the auto-increment sequence of the table's primary key, and then inserting rows from the specific state file into the table. Table.
Sometimes, we may not want to reset every table described in a specific state file before a set of tests, because resetting too many specific state files may take a lot of time. In this case, We can write a PHP script to customize this initialization process. This script should be saved in the directory where the specific state file is stored, and named init.php
. When CDbFixtureManager detects the existence of this script, it will Execute this script instead of resetting each table.
It's okay if you don't like to use the default way to reset the table, for example: clear the table and then insert specific state data. If this is the case, we can specify Write an initialization script for a specific state file. This script must be named table name + .init.php
. For example: The initialization script file for the Post
table is Post.init. php
. When CDbFixtureManager finds this script, it will execute this script instead of using the default method to reset the table.
Tip: Too many specifics State files greatly extend test time. Therefore, you should only provide specific state files for tables whose data will change during the test. Tables that serve as lookup services will not change and therefore do not require specific state files.
In the next two sections, we will talk about how to use specific states managed by CDbFixtureManager in unit tests and functional tests.
The above is the Yii Framework Official Guide Series 38 - Defining Specific States (Fixtures) content, please pay attention to the PHP Chinese website (www.php.cn) for more related content!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Yii is a high-performance MVC framework based on PHP. It provides a very rich set of tools and functions to support the rapid and efficient development of web applications. Among them, the RESTful API function of the Yii framework has attracted more and more attention and love from developers, because using the Yii framework can easily build high-performance and easily scalable RESTful interfaces, providing strong support for the development of web applications. . Introduction to RESTfulAPI RESTfulAPI is a

Yii framework middleware: providing multiple data storage support for applications Introduction Middleware (middleware) is an important concept in the Yii framework, which provides multiple data storage support for applications. Middleware acts like a filter, inserting custom code between an application's requests and responses. Through middleware, we can process, verify, filter requests, and then pass the processed results to the next middleware or final handler. Middleware in the Yii framework is very easy to use

With the rapid development of web applications, modern web development has become an important skill. Many frameworks and tools are available for developing efficient web applications, among which the Yii framework is a very popular framework. Yii is a high-performance, component-based PHP framework that uses the latest design patterns and technologies, provides powerful tools and components, and is ideal for building complex web applications. In this article, we will discuss how to use Yii framework to build web applications. Install Yii framework first,

Steps to implement web page caching and page chunking using the Yii framework Introduction: During the web development process, in order to improve the performance and user experience of the website, it is often necessary to cache and chunk the page. The Yii framework provides powerful caching and layout functions, which can help developers quickly implement web page caching and page chunking. This article will introduce how to use the Yii framework to implement web page caching and page chunking. 1. Turn on web page caching. In the Yii framework, web page caching can be turned on through the configuration file. Open the main configuration file co

In recent years, with the rapid development of the game industry, more and more players have begun to look for game strategies to help them pass the game. Therefore, creating a game guide website can make it easier for players to obtain game guides, and at the same time, it can also provide players with a better gaming experience. When creating such a website, we can use the Yii framework for development. The Yii framework is a web application development framework based on the PHP programming language. It has the characteristics of high efficiency, security, and strong scalability, and can help us create a game guide more quickly and efficiently.

Yii framework middleware: Add logging and debugging capabilities to applications [Introduction] When developing web applications, we usually need to add some additional features to improve the performance and stability of the application. The Yii framework provides the concept of middleware that enables us to perform some additional tasks before and after the application handles the request. This article will introduce how to use the middleware function of the Yii framework to implement logging and debugging functions. [What is middleware] Middleware refers to the processing of requests and responses before and after the application processes the request.

In the Yii framework, controllers play an important role in processing requests. In addition to handling regular page requests, controllers can also be used to handle Ajax requests. This article will introduce how to handle Ajax requests in the Yii framework and provide code examples. In the Yii framework, processing Ajax requests can be carried out through the following steps: The first step is to create a controller (Controller) class. You can inherit the basic controller class yiiwebCo provided by the Yii framework

In modern web application development, debugging tools are indispensable. They help developers find and solve various problems with their applications. As a popular web application framework, the Yii framework naturally provides some debugging tools. This article will focus on the debugging tools in the Yii framework and discuss how they help us analyze and debug applications. GiiGii is a code generator for the Yii framework. It can automatically generate code for Yii applications, such as models, controllers, views, etc. Using Gii,
