测试 Rspec should 和 expect 的区别

windless_j · 2013年08月22日 · 最后由 hiveer 回复于 2014年12月19日 · 5587 次阅读

回顾了下新版的 Rails Tutorial,发现新版的 Rspec 的用法不同了。

从之前的

true.should be_true

改成了现在的

expect(true).to be_true

请问下这两着有什么区别,为什么现在要改成 expect 的风格

因为expect的实现侵入性比较低,expect方法会返回一个代理对象,上面绑定了一些可以用来进行断言的方法。

should的实现是将should一类的方法直接注入到所有的对象里,破坏性比较高。如果你自己定义了一些和should一类同名的方法就悲剧了。

#1 楼 @_kaichen 明白啦,谢谢回答

expect { this_block }.to raise_error

expect 可以

如果你现在做个新项目,请习惯使用 expect,RSpec 3 将会移除 should 语法。

#1 楼 @_kaichen 你的意思是否是 expect 实际上就是 mock 了一个 Verifying doubles

需要 登录 后方可回复, 如果你还没有账号请 注册新账号