[Unit Testing for Zombie] 06. Using Factory

本文通过实例讲解了如何使用FactoryGirl创建复杂的数据模型,包括如何定义工厂、确保数据唯一性及建立数据间的关系。同时介绍了FactoryGirl在测试中的应用,如验证模型有效性及集成测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FACTORIES

Convert the zombies fixture to a Factory Girl Factory called :zombie.

test/fixture/zombies.yml

zombie:
  name: 'Sally'
  graveyard: 'Valley Dim'

Answer:

test/factories/zombies.rb

FactoryGirl.define do
  factory :zombie do
   name 'Sally'
   graveyard 'Valley Dim'
  end
end

 

Why using factory instead of fixture?

 

COMPLEX FACTORIES

Use a nested Factory Girl definition to create zombie factories named :sally and :moe, using the data from the fixtures below.

test/fixtures/zombies.yml

ash:
  name: 'Ash'
  graveyard: 'Petrosville'
 
sally:
  name: 'Sally'
  graveyard: 'Valley Dim'
 
moe:
  name: 'Moe'
  graveyard: 'Petrosville'

Answer:

test/factories/zombies.rb

FactoryGirl.define do
  factory :zombie do
    name 'Ash'
    graveyard 'Petrosville'

    # Add sally and moe here
    factory :sally do
      name 'Sally'
      graveyard 'Valley Dim'
    end
    
    factory :moe do
      name 'Moe'
    end
  end
end

 

How to create a factory?

What's good in factory?

We can use nested factory to create new factory and reused common part.

 

UNIQUE ATTRIBUTES

Refactor the zombie factory using a sequence so that we get a unique name and graveyardeverytime we create a new zombie.

FactoryGirl.define do
  factory :zombie do
    sequence(:name) {|i| "Ash#{i}" }
    sequence(:graveyard) { |j| "Petrosville Cemetary#{j}" }
  end
end

 

Why using sequence?

Every time using a Factory, it equals to :

FactoryGirl.create(:zombie) //create new zombie instance and save into db

But if the data should be uniqueness, then it will cause some problem like: ActiveRecord: RecordInvalid.

Then we can use sequence to solve this problem.

 

ASSOCIATIONS

Create a tweet factory with a zombie association, don't forget to set a tweet status.

FactoryGirl.define do
  factory :zombie do
    name 'Sally'
    graveyard 'Valley Dim'
  end
end

Answer:

FactoryGirl.define do
  factory :tweet do
    status "Eat a brain"
    association :zombie
  end
end

 

What about data relationship?

 

USING FACTORIES

Using factories write a test to verify that a tweet is invalid without a status. Be sure tobuild the Tweet, rather than create it.

FactoryGirl.define do
  factory :tweet do
    association :zombie
    status "Need brain factory."
  end
end

Answer:

class TweetTest < ActiveSupport::TestCase
  test "A tweet requires a status" do
    tweet = Factory.build(:tweet, status: nil)
    assert !tweet.valid?, "Status is not being validated"
  end
end

 

USING FACTORIES II

Create a tweet using a factory. Then, using Capybara, go to the tweets_url, click on thetweet.status link. Finally, assert that the tweet's show page contains the@tweet.zombie.name in its h3. Use Capybara's within and has_content? methods.

//index.html

<ul class="tweets">
  <li><%= link_to @tweet.status, tweets_url(@tweet) %></li>
</ul>
//show.html

<div id='<%="tweet_#{@tweet.id}"%>'>
  <h3><%= @tweet.zombie.name %></h3>
  <p><%= @tweet.status %></p>
</div>

test/factories/tweets.rb

FactoryGirl.define do
  factory :tweet do
    association :zombie
    status "Need brain factory."
  end
end

factories/zombies.rb

FactoryGirl.define do
  factory :zombie do
    name "Ash"
    graveyard "Factory Hills Cemetary"
  end
end

Answer:

class TweetTest < ActionDispatch::IntegrationTest
  test "tweet page has zombie link" do 
    tweet = Factory(:tweet)
    visit tweets_url
    click_link tweet.status
    
    within("h3") do
      assert has_content? (tweet.zombie.name)
    end
  end
end

 

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值