0

我正在尝试验证验证器在我的模型上是否正常工作,为此我正在使用 Rspec 和 Capybara。这是我的代码。

describe "#when registering" do
    before { visit new_record_path } 
        describe "#with invalid information" do
            describe "#should not modify database" do
                subject { -> { click_button submit } }
                    it { should_not change(Pet, :count) }
                    it { should_not change(Owner, :count) }
                end
            end
     end
end

当我运行规范时,我收到一个错误:“NilClass:Class 的未定义方法'model_name'”

什么可能导致 rspec 认为我的模型为零?

谢谢!

4

1 回答 1

1

您不应该使用功能/验收测试来测试您的验证,而应该使用模型测试。然后,对于每个表单,如果某些内容无效,您可以测试一个错误,而不是通过验收测试来测试每个错误。对于每个模型,它应该是这样的:

describe Pet do
  describe "validations" do
    # These can echo any model validation
    it "is invalid if attribute is not present" do
      Pet.new(:attribute => "Invalid Item").should_not be_valid
    end
  end
end

或与工厂女孩:

describe Pet do
  describe "validations" do
    it "is invalid if attribute is not present" do
      build(:pet, :attribute => "Invalid Item").should_not be_valid
    end
  end
end

然后在验收测试中你可以有类似的东西:

  it "displays an error if validation fails" do
     visit new_pet_path

     #Something to make the form submission fail, not everything
     fill_in("Attribute", :with => "")
     click_button("Create Pet")

     page.should have_content("can't be blank")
     current_path.should == pets_path
   end

这将有助于保持您的验收测试轻松并在它所属的模型中测试验证。希望这可以帮助!

于 2013-06-07T04:50:20.300 回答