我有一个没有数据库的模块化Sinatra应用程序,为了测试内存缓存,我有一些需要在文件系统上创建和删除的测试文件。我想在AfterConfiguration钩子中使用一些辅助方法生成这些文件(这些方法位于与rspec共享的模块中,这也需要创建/删除这些文件以进行测试)。我只想在黄瓜开始时创建一次。
我似乎无法从AfterConfiguration中访问帮助程序,它位于“support / hooks.rb”中。帮助者可以从Cucumber的步骤访问,所以我知道他们已经正确加载。
上一篇文章似乎有一个答案:Want to load seed data before running cucumber
这个答案中的第二个例子似乎说我的模块应该可以访问我的AfterConfiguration块,但是当我尝试调用辅助方法“foo”时,我得到“nil:NilClass”的“未定义方法`foo”。
我可以将所有东西都拉到rakefile中并以这种方式运行,但我想知道我在这里缺少的东西。
答案 0 :(得分:0)
在代码中进行挖掘后,似乎AfterConfiguration不仅在加载任何功能之前运行,而且在World实例化之前运行。在AfterConfig块内运行self.class返回NilClass。在任何其他钩子(例如Before)中运行self.class将返回MyWorldName。回想起来,这是有道理的,因为每个功能都在一个单独的World实例中运行。
这就是定义为实例方法(即def method_name)的助手未知的原因。将我的方法更改为模块方法(即def ModuleName.method_name)允许它们起作用,因为它们实际上都是模块方法。