如果单击按钮更改了用户数,这是测试的正确代码:
expect { click_button "Create my account" }.not_to change(User, :count)
(正确的)
但花括号似乎如此奇怪地放在上面。为什么 Capybara 使用上面的语法而不是下面的语法?
expect { click_button("Create my account").not_to change(User, :count) }
(不正确)
如果单击按钮更改了用户数,这是测试的正确代码:
expect { click_button "Create my account" }.not_to change(User, :count)
(正确的)
但花括号似乎如此奇怪地放在上面。为什么 Capybara 使用上面的语法而不是下面的语法?
expect { click_button("Create my account").not_to change(User, :count) }
(不正确)
expect {} 指定了一个代码块,在执行后针对更改关键字进行测试。见http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
每个 Ruby 方法都需要一个block。块用do...end
构造或花括号表示。
def my_method
yield
end
my_method { puts "hello world" }
"hello world"
=> nil
my_method do
puts "hello world again!"
end
"hello world again!"
=> nil
expect
在这种情况下是RSpec 匹配器,而不是 Capybara 方法。花括号意味着您正在定义将在稍后执行的代码。在这种情况下,它将在两次调用User.count
.
# approximation of what RSpec is doing with `expect` curly braces.
count = User.count
yield # executes code in curly braces
new_count = User.count
assert(count == new_count)