1

我有几个如下所示的规范文件:

describe "My DSL" do

  before :each do
    @object = prepare_my_object
  end

  describe "foo" do

    before :each do
      @result = @object.read_my_dsl_and_store_stuff_in_database__this_is_expensive
    end

    it "should do this" do
      @result.should be_this
    end

    it "should not do that" do
      @result.should_not be_that
    end

    # ... several more tests about the state of @result
  end

  # ...
end

这些测试需要很长时间,主要是因为第二个before :each块每次都运行。使用before :allinstead 并没有真正的帮助,因为它在 external 之前被调用before :each。将所有期望放在一个it块中会有所帮助,但这被认为是不好的风格。

让我的昂贵方法只执行一次的最佳做法是什么?

4

1 回答 1

0

加快rspec最快的方法是完全解耦数据库。DSL问题与将内容进出数据库问题是不同的问题。如果您有一种方法可以同时进行这两种操作,是否可以将方法分成几部分?

理想情况下,您的 DSL 将在本地缓存,因此不必在每次请求时都从数据库中提取它。它可以在内存中加载一次并在刷新之前保存在那里。

如果您针对本地内存缓存运行并解耦数据库,这会加快速度吗?如果是,那么就是数据库调用很慢。如果您的 DSL 完全加载到内存中并且测试仍然很慢,那么问题出在您的 DSL 本身。

于 2012-11-13T09:45:00.310 回答