2014-10-31 23 views
5

Tôi làm cách nào để thực hiện các thao tác sau mà không cần sử dụng any_instance từ Mocha? Tôi chỉ muốn thử nghiệm một Controller được bảo vệ như described here mà không cần sử dụng Rspec.stub any_instance bằng cách sử dụng Minitest

class PortfoliosControllerTest < ActionController::TestCase 

    setup do 
    @portfolio = portfolios(:p2) 
    user = @portfolio.user 

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest', 
              resource_owner_id: user.id) 
    PortfoliosController.any_instance.stubs(:doorkeeper_token).returns(token) 
    end 
end 
+1

Bạn đã thấy giải pháp này cho stubbing không có thư viện? http://stackoverflow.com/a/10329105/356060 – TuteC

Trả lời

5

Bạn không cần khai báo bất kỳ phiên bản nào của PortfoliosController, chỉ là ví dụ mà thử nghiệm đang sử dụng. Điều này có sẵn trong biến số @controller, như được giải thích trong ActionController::TestCase documentation.

class PortfoliosControllerTest < ActionController::TestCase 

    setup do 
    @portfolio = portfolios(:p2) 
    user = @portfolio.user 

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest', 
              resource_owner_id: user.id) 
    @controller.stubs(:doorkeeper_token).returns(token) 
    end 
end 
+0

'NoMethodError: phương thức undefined' stubs 'cho # 'bây giờ tôi đoán, tôi chỉ cần đúng cách để khai thác với Minitest –

+0

Nếu bạn có yêu cầu Mocha sau đó '.stubs' sẽ có sẵn. Lỗi đó khiến tôi nghĩ rằng bạn chưa tải Mocha. – blowmage

+1

không yêu cầu Mocha là một phần của câu hỏi của tôi. Làm thế nào tôi có thể làm điều đó bằng cách sử dụng Minitest? –

2

Tôi khuyên bạn nên kiểm tra this gem. Cho phép bạn làm điều gì đó như ...

class PortfoliosControllerTest < ActionController::TestCase 
    def cool_test 
    PortfoliosController.stub_any_instance(:doorkeeper_token, token) do 
     # Assert whatever you were going to assert 
    end 
    end 
end 

loại tốt đẹp cũng không phải lo lắng về số setup.

1

'không Mocha' phiên bản của câu trả lời 'blowmage'

class PortfoliosControllerTest < ActionController::TestCase 

    setup do 
    @portfolio = portfolios(:p2) 
    user = @portfolio.user 

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest', 
              resource_owner_id: user.id) 
    @controller.stub(:doorkeeper_token,token) do 
     #do your tests 
    end 
    end 
end 

thấy http://www.rubydoc.info/gems/minitest/4.2.0/Object:stub

Các vấn đề liên quan