rspec ruby​​ on Rails 新手关于控制器的问题

发布于 2024-12-03 18:59:25 字数 315 浏览 0 评论 0原文

我对 RoR 或 rspec 很陌生,正在尝试学习它。首先,我找不到针对新手的教程,只有高级教程,因为我想学习 RoR,同时学习测试。 我正在为简单的 CRUD 控制器编写测试,但我不知道如何测试,例如参数是否传递到我的创建操作,以及它是否已保存。

def create
    @item = TextItem.new(params[:item])

    if @item.save
       redirect_to(:action => 'index')
    else
       render('new')
      end
  end

im new to RoR or rspec and trying to learn it.First of all i cant find tutorials for newbies, just advanced ones, becouse i want to learn RoR and at the same time learn to test.
Im writing test for simple CRUD controllers, but i have no idea how to test for example if params passed to my create action, also if it was saved.

def create
    @item = TextItem.new(params[:item])

    if @item.save
       redirect_to(:action => 'index')
    else
       render('new')
      end
  end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃兔兔 2024-12-10 18:59:25

我认为更好的方法是熟悉 Rails 和 ruby​​,然后使用 test/unit 或 minitest 或 rspec、cucumber 或许多其他测试技术深入研究 tdd/bdd。

我建议您购买一本书/电子书来开始,例如这本 Agile使用 Rails 进行 Rails 开发,电子书仅需 24 美元。你会节省很多时间。

有时 Rspec 有点棘手/神奇,如果没有 Rails/Ruby 的基础知识,可能很难开始使用。

我不建议你一次性学习rails和rspec。

顺便说一句,此操作的规范可以是这样的:

  describe "POST create" do
    let(:item) { mock_model(TextItem) }

    before(:each) do
      TextItem.stub(:new).and_return(item)
    end

    it "saves the item" do
      item.should_receive(:save)
      post :create
    end

    context "when the item saves successfully" do
      before(:each) do
        item.stub(:save).and_return(true)
      end

      it "redirects to the items index" do
        post :create
        response.should redirect_to(:action => "index")
      end
    end

    context "when the item fails to save" do
      before(:each) do
        item.stub(:save).and_return(false)
        item.stub_chain(:errors, :empty?).and_return(false)
      end

      it "renders the new template" do
        post :create
        response.should render_template(:new)
      end
    end
  end

I think the better way is to become familiar with rails and ruby and only then dive into tdd/bdd with test/unit or minitest or rspec, cucumber or a lot of other testing techniques.

I recommend you to buy a book/ebook to start, for example this one Agile rails development with rails, ebook only $24. You will save a lot of time.

Sometimes Rspec is a little bit tricky/magical and without base knowledge of rails/ruby it can be difficult to start using.

I don't suggest you to study rails and rspec in one attempt.

BTW specs for this action can be like that:

  describe "POST create" do
    let(:item) { mock_model(TextItem) }

    before(:each) do
      TextItem.stub(:new).and_return(item)
    end

    it "saves the item" do
      item.should_receive(:save)
      post :create
    end

    context "when the item saves successfully" do
      before(:each) do
        item.stub(:save).and_return(true)
      end

      it "redirects to the items index" do
        post :create
        response.should redirect_to(:action => "index")
      end
    end

    context "when the item fails to save" do
      before(:each) do
        item.stub(:save).and_return(false)
        item.stub_chain(:errors, :empty?).and_return(false)
      end

      it "renders the new template" do
        post :create
        response.should render_template(:new)
      end
    end
  end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文