如何在RSpec功能中定义变量?

时间:2013-08-18 19:11:04

标签: ruby-on-rails

我正在学习Rails 4并尝试使用Rspec和capybara编写一些测试。我正在为我的用户编写功能测试,我正在尝试测试用户登录。

feature "User" do
        scenario "A user signs in" do
            let(:user) { FactoryGirl.create(:user) }
            visit signin_path

            fill_in "Username", with: user.username
            fill_in "Password", with: "123456"
            click_button "Log in"

            expect(page).to have_content(user.username)
        end
end

它告诉我let是一个未定义的方法。我确定问题在于它是在功能/场景测试中。如何在此类测试中定义用户?

此外,在像这样的描述/请求测试中

describe "Something" do
    it "should do something" do
        expect(page).to have_content{"...")
    end
end

我可以像这样缩短它

describe "Something" do
    subject { page }
    it { should have_content("...") }
end

有没有办法缩短方案中的expect(page).....?感谢。

1 个答案:

答案 0 :(得分:0)

let用于在多个测试中根据需要对“变量”进行延迟初始化;在测试中初始化它是荒谬的。将let移到scenario块之外,或者只使用标准变量赋值,例如user = FactoryGirl.create(:user)