ctasca / magefix
Magento Behat Fixtures 库
Requires
- php: >=5.3
- magetest/magento-behat-extension: dev-feature/Behat3
- symfony/yaml: ~2.0
Requires (Dev)
- behat/behat: 3.0.15
- behat/mink-goutte-driver: ~1.1
- behat/mink-selenium2-driver: *
- bossa/phpspec2-expect: ~1.0
- phpmetrics/phpmetrics: *
- phpspec/phpspec: 2.5.1
- sensiolabs/behat-page-object-extension: dev-master
This package is not auto-updated.
Last update: 2024-09-20 21:27:20 UTC
README
一个用于简化 BehatMage 创建 Magento 的 fixtures 的库。目前可用的 fixtures 类型包括:
- 分类
- 客户
- 简单产品
- 可配置产品
- 捆绑产品
- 分组产品
- 销售订单类型(访客)
- 销售订单类型(收银台)
- 销售订单类型(客户)
- API 角色
- API 用户
- 管理员用户
- OAuth 消费者
请按照以下步骤开始,如果在安装过程中遇到任何问题,请首先检查常见问题部分。
安装
1) 将 Magefix 添加到您的 composer.json
将以下内容添加到您的 composer.json
... "require-dev": { "ctasca/magefix": "dev-develop" }, ...
2) 创建 FixtureLocator
在 features/fixtures 目录中创建 FixtureLocator 类。此类必须为 Magefix\Parser\ResourceLocator
接口中指定的 getLocation()
方法提供具体实现。
getLocation 方法应返回 yml fixtures 文件的路径。**重要:**请确保路径以正斜杠结尾。
以下是一个 ResourceLocator 的示例
use Magefix\Parser\ResourceLocator; class FixturesLocator implements ResourceLocator { public function getLocation() { return 'features/fixtures/yaml/'; } }
3) 自动加载 FixtureLocator 和 feature/fixtures
在您的 composer.json
中添加以下内容
"autoload": { "psr-0": { "": [ ... "features/fixtures" ], ... "FixturesLocator" : "features/fixtures/FixturesLocator" } },
运行 composer dump-autoload
或 composer dumpautoload
以重新生成自动加载文件。
**注意:**可以创建多个 FixtureLocator。这主要取决于项目需求。要使用不同的 fixtures 定位器,请参阅创建 fixtures 和 使用多个定位器部分。
创建 fixtures
1) 创建 fixture yml
在选定的 fixture 位置,创建一个包含 fixture 定义的 yml 文件。项目的 examples
目录中可以找到 fixture yml 文件的示例。
以下是一个 Magento 简单产品 fixture 的示例
fixture: model: catalog/product data_provider: 'Data\Providers\SimpleProduct' attributes: name: 'Simple Product Fixture' description: 'Long Description' short_description: 'Short Description' weight: 10 status: 1 visibility: 4 price: 100.00 tax_class_id: 0 website_ids: '{{getWebsiteIds}}' attribute_set_id : '{{getDefaultAttributeSetId}}' category_ids: '{{getCategoryIds}}' type_id: '{{getTypeId}}' sku: '{{getSku}}' stock: stock_data: qty: '{{getStockQty}}' is_in_stock: 1 manage_stock: 1
2) 创建 Fixture 的 Data Provider
大多数 fixtures yml 文件中的 fixture 节点可以使用 {{DATA_PROVIDER_METHOD}}
语法定义动态生成的值。这意味着在解析 fixture 的 yml 时,将通过指定的 Data Provider 动态分配该节点的值。
简单来说,**Data Providers** 是数据对象,应添加到 features/fixtures
目录中,并提供 fixture 的 yml 中指定的任何方法。如果指定的 Data Provider 没有或没有部分方法,将抛出 ProviderMethodNotFound
异常。
在 fixtures 的 yml 定义中可以切换作用域内的数据提供者,从而允许重用现有数据提供者。例如,在创建销售订单 fixture 时,我们可能还想创建产品和客户 fixture。
fixture: model: sales/quote data_provider: 'Data\Providers\SalesOrderCustomer' attributes: store_id: '{{getStoreId}}' quote_products: products: 0: model: catalog/product data_provider: 'Data\Providers\SimpleProduct' attributes: name: 'Simple Product Fixture' description: 'Long Description' short_description: 'Short Description' weight: 10 status: 1 visibility: 4 price: 100.00 tax_class_id: 0 website_ids: '{{getWebsiteIds}}' attribute_set_id : '{{getDefaultAttributeSetId}}' category_ids: '{{getCategoryIds}}' type_id: '{{getTypeId}}' sku: '{{getSku}}' stock: stock_data: qty: 10 is_in_stock: 1 manage_stock: 1 checkout: data_provider: 'Data\Providers\SalesOrderCustomer'
以下是一个 Data Provider 的示例
use Mage_Catalog_Model_Product_Type; use Mage_Catalog_Model_Product_Visibility; use Magefix\Fixtures\Data\Provider; class SimpleProduct implements Provider { public function getWebsiteIds() { return [1]; } public function getDefaultAttributeSetId() { return 4; } public function getCategoryIds() { return [5, 14]; } public function getSku() { $random = substr(md5(rand()), 0, 7); return 'SKU-' . $random; } public function getTypeId() { return Mage_Catalog_Model_Product_Type::TYPE_SIMPLE; } public function getStockQty() { return 10; } public function getFixtureImage() { return '/vagrant/features/fixtures/images/placeholder.jpg'; } public function getVisibility() { return Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH; } }
3) 在 Behat 的 Feature 类中创建 Fixture
要构建 Behat 运行时的 fixture,请编辑所需的 Feature Context 文件并执行以下操作:
1) 添加 use
语句并包含 Fixtures Registry
和 Builder
use Magefix\Fixtures\Registry as FixturesRegistry; use Magefix\Fixture\Factory\Builder as FixtureBuilder;
2) 添加 Fixtures Registry
特性 use
语句
/** * Default features context. */ class FeatureContext extends MagentoContext { use FixturesRegistry;
在 Behat 的 Feature 类中调用 Builder::build
操作
FixtureBuilder::build( FixtureBuilder::SIMPLE_PRODUCT_FIXTURE_TYPE, new FixturesLocator(), 'simple-product.yml', '@AfterFeature' );
Builder 的 fixture 类型常量
Builder::SIMPLE_PRODUCT_FIXTURE_TYPE
Builder::CUSTOMER_FIXTURE_TYPE
Builder::CATEGORY_FIXTURE_TYPE
Builder::CONFIGURABLE_PRODUCT_FIXTURE_TYPE
Builder::BUNDLE_PRODUCT_FIXTURE_TYPE
Builder::GROUPED_PRODUCT_FIXTURE_TYPE
Builder::SALES_ORDER_FIXTURE_TYPE
Builder::API_ROLE_FIXTURE_TYPE
Builder::API_USER_FIXTURE_TYPE
Builder::ADMIN_FIXTURE_TYPE
Builder::OAUTH_CONSUMER_FIXTURE_TYPE
清理固定装置
构建固定装置后,要通过Behat钩子删除它,只需将钩子提供到Builder
的build
方法。
注意:如果没有指定钩子,创建的固定装置将不会添加到Registry
进行清理,因此不会被删除。
可用的钩子
@BeforeSuite
@AfterSuite
@BeforeFeature
@AfterFeature
@BeforeScenario
@AfterScenario
@BeforeStep
@AfterStep
插件
插件以特性形式存在。以下特性可用
AdminPanelSession
提供管理管理面板会话键的操作。
- getCurrentUrlKey
- getSessionKeyForUrl(string)
DriverCurrentUrl
检索驱动程序当前url。
- getDriverCurrentUrl()
DriverSession
提供刷新驱动程序会话的功能。
- refreshSelenium2Session()
DriverSwitcher
提供在窗口和i-frames之间切换驱动程序作用域的功能。
- switchToIFrame(string|object) 接受字符串或SensioLabs\Behat\PageObjectExtension\PageObject\Element对象
ElementObjectGetter
提供在不提供初始选择器的情况下创建Element对象的功能。
- getElementObject(string)
Spinner
为上下文提供“等待”功能。
-
spin(lamba, wait) 其中lamba是一个函数,wait是秒数超时的操作。
-
spinUntilVisible(element, wait) 旋转直到元素可见。默认超时为60秒。元素可以是字符串或SensioLabs\Behat\PageObjectExtension\PageObject\Element对象。
-
spinUntilInvisible(element, wait) 旋转直到元素不可见。默认超时为60秒。元素可以是字符串或SensioLabs\Behat\PageObjectExtension\PageObject\Element对象。
-
spinAndClick(element, wait) 旋转并单击元素。默认超时为60秒。元素可以是字符串或SensioLabs\Behat\PageObjectExtension\PageObject\Element对象。
-
spinAndPress(element, wait) 旋转并按元素。默认超时为60秒。元素可以是字符串或SensioLabs\Behat\PageObjectExtension\PageObject\Element对象。
-
spinAndDo(element, action) 旋转并执行指定操作。元素可以是字符串或SensioLabs\Behat\PageObjectExtension\PageObject\Element对象,操作是字符串(例如“press”)。还可以接受可选的条件和超时。默认超时为60秒。
WindowResizer
提供调整上下文窗口大小的功能。
-
resizeToDesktopWindow(DriverInterface)
-
resizeToMobileWindow(DriverInterface)
使用多个定位器
要使用多个定位器,只需创建它们并确保它们通过composer自动加载。加载后,将所需的定位器实例传递给Builder
的build
方法。
常见问题
请详细说明遇到的设置问题以及逐步修复说明,并在可能的情况下更新项目本身以提供更持久的修复。
- 目前没有报告的常见问题
许可证
版权所有 (C) 2015-2016
特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人免费处理该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许将软件提供给他人,以便他们这样做,前提是以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、特定用途和侵权不保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是否因合同、侵权或其他行为而产生,源自、因之或与之有关软件或其使用或其它交易。