Rspec Factory Girl测试类方法?

时间:2014-01-21 20:12:13

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

我是Rspec和Factory Girl的新手。我用它来测试已经存在的模型。有没有办法使用Factory Girl生成的副本在apps / model目录中测试原始模型中的现有类方法?

1 个答案:

答案 0 :(得分:0)

当然。只需在spec / models目录中创建spec文件。

以下是certificate_spec.rb模型的示例Certificate文件,该文件应验证证书是否为first_name

require 'spec_helper'

describe "Certificate" do
  let(:certificate) { FactoryGirl.build(:certificate) }

  it "is valid with valid attributes" do
    expect(certificate).to be_valid
  end

  it "is not valid without a first name" do
    certificate.firstname_a = nil
    expect(certificate).not_to be_valid
  end
end

要测试特定的类方法,请根据需要设置模型,使用工厂或从工厂创建实例并进行修改。

然后只需在实例上调用您需要的方法:

it "should respond to #doSomething with true" do
  expect(certificate.doSomething).to be_true
end

更新

正如Junchao Gu所指出的,我没有提供上面测试类方法的例子。

根据定义,类方法是在类而不是它的任何实例上定义的。因此,您不需要FactoryGirl创建的任何实例,以便能够测试类方法。只需在课堂上设定您的期望。

例如,假设User类提供了用户可以成为其成员的角色列表。您可能希望确保以某种方式定义这些角色:

require 'spec_helper'

describe "User" do
  describe ".available_roles" do
    it "should return anonymous, member, moderator, admin in that order" do
      expect(User.available_roles).to_equal %w{anonymous member moderator admin}
    end
  end
end

请注意,expecation是针对User类的,而不是针对它的实例。