请问上海的 RubyTuesday 是每个月一次吗?还是不定时的?:)
#15 楼 @southwolf 嘿嘿,乘新手刚入门时就抓进来调教,这样才能壮大 Slim 的用户群啊,啊哈哈哈(邪恶的笑~~)
或者可以使用 Slim,自动生成漂亮的 HTML,嘿嘿 http://slim-lang.com/
我在早前一个帖子里回复过,我在这里再回复一下——
我一般写 library,用 MiniTest(Test::Unit)。写应用程序,用 RSpec,主要是 RSpec 的 DSL 比 Test::Unit 要简练。当然,MiniTest 有个 Spec 的库可以用,不过我几乎没怎么用过,不知道是否支持 shared examples/context。
RSpec 部分是我加的。
Test::Unit 如何简单的实现 Rspec 里的 shared examples 和 shared context?
可以用 Newrelic 帮助查找程序的性能瓶颈。
我一直用 Twilight.
另外,其实刚开始开发这个社区系统就用上那么多 cache,本身也是一个 smell (premature optimisation). :P 咳咳,我比较洁癖一点,哈,见谅见谅~~
貌似 aws-ses 支持用 send_raw_email 自己加 MIME-TYPE,gem 还没有专门的 api。
#5 楼 @huacnlee 哦,看错了,那就是这个:https://github.com/drewblas/aws-ses
CarrierWave: https://github.com/jnicklas/carrierwave
另外提个小建议:用户的 ID 集最好写'user_ids',因为'uids'一般是用来表示 unique ids 的。:)
Topic#user_readed? 初步重构完毕:https://github.com/fredwu/ruby-china/commit/5f02b50749f6df945e1478f2106e78eeb68ce51d
重构需要一步一步慢慢来。
先对代码其他地方做了些微调整: https://github.com/huacnlee/ruby-china/pull/35/files
出去跑一圈步回来后继续重构……
我正在加测试,一会儿我会重构一下然后提交 pull request。:)
另外,可以给用户模型加个 karma 值。karma 越高的加成越多。
啊,我的 blog(http://fredwu.me/ ),mac 用户 40%,win 用户 38%,linux 用户 20%……
在 https://github.com/huacnlee/ruby-china/pull/9/files#L6R47 里:
这些登录步骤都是重复的——
And 点击"登录"
And 在"用户名"输入"sergey"
And 在"密码"输入"sergeywonttellyou"
And 点击"登陆"
这些都应该放在一个 step definition 里。
RSpec/Test::Unit/MiniTest用来测试程序的逻辑。
Cucumber用来模拟用户使用你的程序的流程。
我的 Angel Nest 项目应该算是比较适合新手学习的—— https://github.com/fredwu/angel_nest
Cucumber 原本是写给产品人员看的,或是说,产品人员或测试人员可以写 Cucumber 用来制定程序的逻辑。
但是,产品和测试写出来的 Cucumber steps 都不是很 dry,非常难维护。即便是一些经验不多的开发人员,也写不好 Cucumber 的 steps。
用 Cucumber 做 acceptance tests 的用意是,features/scenarios 本身不应该包含任何 implementation 的逻辑——如果页面上的 UI 有更动,你应当修改 step definition,而非 features。
比方说,如果要测试用户登录。很多人会这么写:
Given I'm on the hompage
When I click the "login" link
Then I should see "User Login"
Then I fill in "username" with "test"
Then I fill in "password" with "test"
Then I click the "login" button
Then I should see "Welcome test! You're logged in."
类似这样的 feature 很难维护。如果登录的逻辑变动了,你需要修改很多地方。
比较正确的写法是——
Given I'm on the homepage
Then I should be able to sign in as user "test" with password "test"
然后把所有的登录逻辑放到第二行的 step definition 里。