0

这是我的rspec文件:

require 'spec_helper'

describe Classroom, focus: true do

  describe "associations" do
    it { should belong_to(:user) }
  end

  describe "validations" do
    it { should validate_presence_of(:user) }
  end

  describe "instance methods" do

    describe "archive!" do
      before(:each) do
        @classroom = build_stubbed(:classroom)
      end

      context "when a classroom is active" do
        it "should mark classroom as inactive" do
          @classroom.archive!
          @classroom.active.should_be == false
        end
      end

    end

  end

end

这是我的Classroom Factory

FactoryGirl.define do

  factory :classroom do
    name "Hello World"
    active true

    trait :archive do
      active false
    end
  end

end

当上面的实例方法测试运行时,我收到以下错误:stubbed models are not allowed to access the database

我理解为什么会发生这种情况(但我缺乏测试知识/是测试新手),但不知道如何存根模型以使其不会影响数据库

工作 Rspec 测试:

require 'spec_helper'

describe Classroom, focus: true do

  let(:classroom) { build(:classroom) }

  describe "associations" do
    it { should belong_to(:user) }
  end

  describe "validations" do
    it { should validate_presence_of(:user) }
  end

  describe "instance methods" do

    describe "archive!" do

      context "when a classroom is active" do
        it "should mark classroom as inactive" do
          classroom.archive!
          classroom.active == false
        end
      end

    end

  end

end
4

1 回答 1

1

您的archive!方法是尝试将模型保存到数据库中。而且由于您将其创建为存根模型,因此它不知道如何执行此操作。您有两种可能的解决方案:

  • 将您的方法更改为archive,不要将其保存到数据库中,而是在您的规范中调用该方法。
  • 不要在测试中使用存根模型。

Thoughtbot在这里提供了一个很好的存根依赖关系示例。被测对象 ( OrderProcessor) 是一个真正的对象,而通过它的项目被存根以提高效率。

于 2013-04-18T16:07:16.613 回答