工厂女孩和rspec单元测试

时间:2013-09-27 16:05:03

标签: ruby-on-rails rspec factory-bot

我正在使用factory_girl_rails和rspec并遇到麻烦, 引发以下错误

   1) WebsiteLink when link is external
         Failure/Error: website_link.external should be false

           expected #<FalseClass:0> => false
                got #<WebsiteLink:100584240> => #<WebsiteLink id: nil, website_id: nil, link: nil, external: nil, checked: nil, click_count: nil, transition_count: nil, created_at: nil, updated_at: nil, link_description: nil>

           Compared using equal?, which compares object identity,
           but expected and actual are not the same object. Use
           `expect(actual).to eq(expected)` if you don't care about
           object identity in this example.

这是我在spec.rb文件中的代码

it "when link is external" do
    website = FactoryGirl.create(:website,site_address: "www.socpost.ru")
    website_link = FactoryGirl.create(:website_link, link: "www.google.com", website: website)
    website_link.external should be true
  end

工厂女工厂

FactoryGirl.define do
 factory :website do
    sequence(:site_name){ |i| "Facebook#{i}" }
    sequence(:site_address){ |i| "www.facebook_#{i}.com" }
    sequence(:website_key){ |i| (1234567 + i).to_s }
  end
  factory :website_link do
    sequence(:link){ |i| "www.facebook.com/test_#{i}" }
    external false
    checked false
    click_count 1
    transition_count 1
    link_description "Hello"
    website
  end
end

2 个答案:

答案 0 :(得分:5)

因为我认为理解为什么你收到错误是有帮助的,所以这里有一个解释:

  • 你的陈述有四个用空格分隔的表达式:website_link.externalshouldbefalse
  • Ruby从右到左评估这些
  • false是微不足道的
  • be被解释为以false作为参数的方法调用
  • should被解释为一个结果为be作为参数的方法。
  • should相对于subject进行解释,因为该方法未发送到特定对象
  • 鉴于您收到的错误,subject显式设置为WebsiteLink,或者describe的参数为示例的父级,因此隐式subject }
  • website_link.external从未得到评估,因为错误发生在该点之前

答案 1 :(得分:1)

您忘记使用dot

it "when link is external" do
  website = FactoryGirl.create(:website,site_address: "www.socpost.ru")
  website_link = FactoryGirl.create(:website_link, link: "www.google.com", website: website)
  website_link.external.should be true (note the dot between external and should)
end

试一试。