0

如果单击按钮更改了用户数,这是测试的正确代码:

expect { click_button "Create my account" }.not_to change(User, :count)(正确的)

但花括号似乎如此奇怪地放在上面。为什么 Capybara 使用上面的语法而不是下面的语法?

expect { click_button("Create my account").not_to change(User, :count) }(不正确)

4

2 回答 2

0

expect {} 指定了一个代码块,在执行后针对更改关键字进行测试。见http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax

于 2014-06-04T19:07:44.340 回答
0

每个 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)
于 2017-02-23T21:23:45.900 回答