expect(page).tohave_text(my_shirt.brand)# => the brand name fetched from the `Page::Shirt::Show` page
expect(page).tohave_text(my_shirt.name)# => "my-shirt" from the inherited factory's attribute
expect(page).tohave_text(my_shirt.size)# => "small" from the inherited factory's attribute
expect(page).tohave_text(my_shirt.style)# => "unknown" from the attribute block
expect(page).tohave_text(my_shirt.main_fabric)# => "unknown" from the attribute block
expect(page).tohave_text(my_shirt.name)# => "my-shirt" from the factory's attribute
expect(page).tohave_text(my_shirt.brand)# => the brand name fetched from the `Page::Shirt::Show` page via the block
expect(page).tohave_text(my_shirt.style)# => QA::Factory::Base::NoValueError will be raised because no API response nor a block is provided
expect(page).tohave_text(my_shirt.main_fabric)# => QA::Factory::Base::NoValueError will be raised because no API response and the block didn't provide a value (because it's also based on the API response)
```
You can also explicitely use the API fabrication method, by calling the
You can also explicitly use the API fabrication method, by calling the
QA::Runtime::Logger.info"<#{self.class}> Attribute #{name.inspect} has both API response `#{api_value}` and a block. API response will be picked. Block will be ignored."