首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候使用RSpec let()?

什么时候使用RSpec let()?

提问于 2017-12-21 02:34:14
回答 2关注 0查看 640

我倾向于在块之前使用设置实例变量。然后我在这些例子中使用这些变量。我最近来了let()。根据RSpec文档,它已经习惯了

...定义一个备忘助手的方法。该值将在同一个示例中跨多个调用进行缓存,但不会跨越示例。

这与在前面块中使用实例变量有什么不同?还应该什么时候用let()vs before()?

回答 2

嗨喽你好

发布于 2017-12-21 03:20:36

使用实例变量和之间的差异let()在于,let()是懒评估。这意味着,let()只有在定义的方法第一次运行之后才会进行评估。

before和之间的区别let是let()给你一个很好的方式来定义一个“级联”风格的变量组。通过这样做,通过简化代码,规范看起来好一点。

御姐万岁

发布于 2017-12-21 03:20:27

总是喜欢let一个实例变量的原因有两个:

  • 实例变量在引用时会弹出。这意味着如果你用手指点击实例变量的拼写,就会创建一个新的并将其初始化nil,这会导致细微的错误和误报。既然let创建了一个方法,你会得到一个NameError当你拼错,我觉得更好。这也使重构规格更容易。
  • before(:each)每个示例之前都会运行一个钩子,即使该示例没有使用钩子中定义的任何实例变量。这通常不是什么大问题,但是如果实例变量的设置需要很长时间,那么你正在浪费周期。对于定义的方法let,初始化代码仅在示例调用时才运行。
  • 您可以将示例中的局部变量直接重构为let,而无需更改示例中的引用语法。如果你重构一个实例变量,你必须改变你在示例中引用对象的方式(例如添加一个@)。
  • 这有点主观,但正如迈克·刘易斯指出的那样,我认为这使得规范更易于阅读。我喜欢定义所有的依赖对象的组织,let并保持我的it块好和短。
和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

Let's Encrypt证书如何操作?

1456

代金券什么时候使用?

2209

腾讯云联网什么时候内测完成,进行公测?什么时候正式使用?

1372

网络请求异步访问与 let 报错?

2267

什么时候应该使用git pull --rebase?

21.6K
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
相关问答用户
中建数科 | 技术总监架构部总经理擅长3个领域
公司公司公司公司公司公司 | 职务职务职务职务职务职务擅长3个领域
腾讯云TDP | 高级后端开发工程师擅长3个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档