2013-04-25 4 views
5

Başlamak için, projeye ait bir proje adı ve girişleri gösteren çalışma rayları 'sayfası' sayfası vardı. Projenin adı açısal $ kapsamı ve ERB'de bir blok kullanarak girişler kullanılarak görüntülendiğinde, testlerim geçti. ERB kodunu giriş yönergesinin 'ng-repeat', sadece ile değiştirdiğimde girişlerim senaryoları başarısız olmaya başladı. İlginçtir, uygulama hala tarayıcıda çalışıyordu. Ve hatırla, benim görüşümdeki diğer $ kapsam değişkeni neredeyse aynı bir test kullanarak geçti ve hala devam ediyor.Özellik Testleri AngularJS Görünümleri, ERB'den Açısalya Geçiş Yaparken Bir Kırılımlar Uygulama Kopyalar

Çalışma show.html.erb (ERB içinde Görüntülenen Girişler):

<div ng-controller="ProjectCtrl"> 
    <h1>This is {{ project.details.name }}</h1> 

    <h2>Entries</h2> 
    <% @entries.each do |e| %> 
    <ul> 
    <li> 
     <%= e.title %> 
    </li> 
    <li> 
     <%= e.summary %> 
    </li> 
    </ul> 
    <% end %> 
</div> 

Breaking show.html.erb (Açısal izlendi Girişler):

<div ng-controller="ProjectCtrl"> 
    <h1>This is {{ project.details.name }}</h1> 

    <h2>Entries</h2> 
    <ul ng-repeat=" e in project.entries "> 
    <li> 
     {{ e.title }} 
    </li> 
    <li> 
     {{ e.summary }} 
    </li> 
    </ul> 
</div> 

Eğik Kontrolör, veri olmuştur döndürülmüş JSON ile değiştirilir.

scenario "Displays Entries Summary" do 
    project = Project.create!(details: {name: "aproject"}) 
    Entry.create!(data: {summary: "Should Be Displayed"}, project_id: project.id) 
    Entry.create!(data: {summary: "Should Not Be Displayed"}) 
    visit project_path(project.id) 
    page.must_have_content "Should Be Displayed" 
    page.wont_have_content "Should Not Be Displayed" 
end 

bir şey eksik veya ben özellik testi şekilde değiştirmek zorunda kalacaktır:

@ProjectCtrl = ["$scope", "$http", ($scope, $http) -> 
    $http.get().success (data) -> 
    $scope.project = {"details":{"name":"Project1","author":"brian"},"updated_at":"2013-04-13T16:48:46.406Z","entries":[{"title":"Test Title","summary":"Summary Test"},{"title":"The Third Entry","summary":"Summary of Third Entry"}]} 

] 

Bu daha önce çalışmış ancak ng tekrarı ile ERB değiştirdikten sonra başarısız bir örnek testtir?

+0

Bounty cevabım bu işi neden yaptığını açıklayabilir kim gider. –

cevap

5

Ben poltergeist için Capybara en javascript sürücüsünü ayarlamak bu işi yapmak için. Bu benim entegrasyon testlerinde phantomJS (> = 1.8.1) ve js'yi true olarak ayarladı.

(gösterilen 32-bit işletim yön ile ubuntu 12.10 göre ayarlamak) PhantomJS 1.9 yükleme:

group :test do 
    gem 'poltergeist' 
end 
:

$ cd 
$ wget https://phantomjs.googlecode.com/files/phantomjs-1.9.0-linux-i686.tar.bz2 
$ tar jxvf https://phantomjs.googlecode.com/files/phantomjs-1.9.0-linux-i686.tar.bz2 
$ sudo mv phantomjs-1.9.0-linux-i686.tar.bz2 
$ phantomjs --version 

gerekmektedir Gemfile için poltergeist ekleyin ve paket

Bu

süreçtir

'test_helper.rb' dosyasında veya benzeri:

Böyle: Entegrasyonunuzun/özellik testlerinde

, 'gerçek js': eklemeyi unutmayın

scenario "Your test with Angular.js views", js: true do 
    # test is here 
end 

# OR 

it "Your test with Angular.js views", js: true do 
    # test is here 
end 
1

Denetleyicinizde $ scope.projects öğesini şablona ayarlarsınız, böylece 'proje' değişkeni kullanılabilir olmalıdır. Yaptığınız şablon kodunda 'project.entries' (tekil) üzerinde 'ng-repeat' -sing 'yazıyorsanız, bir yazım hatası yapmadınız veya sahte kod yapıştırmamışsanız, bu tarayıcıda da çalışamaz.

Rayların işlevsel testler hakkında yeterli bilgiye sahip değilim, çünkü tüm JS'lerin onaylamadan önce bitmesini bekleyecektir. Angular'daki rota değişikliklerinden ne haber?

Açısal sayfaların sınanması için Angular'ın JS test kurulumunu karma ve Jasmine ile kullanıyorum. Yasemin daha sonra açısal yığının aktif olduğundan haberdar edilir.

Kontrol dışarı Bu yayını: http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-testacular.html

+0

Biraz daha spesifik olabilir misiniz? Ve hala tarayıcıda çalışıyor. –

+0

İyi yakalama ancak yanlış denetleyiciyi yapıştırdım. –

+1

Çok kötü Ben gönderilen kodda bir hata yakalamak için -1 var. Birim testlerini kullanarak AngularJS'yi test etmek için, Rspec'i veya herhangi bir arka uç teknolojisini kullanamazsınız. Öyleyse zaten frontend/JS testini kurmanız gerekecek. Öyleyse neden Açısal-Jasmine e2e testini açısal kılavuzda veya bağlandığım sitede açıklandığı gibi kullanmayın. –

İlgili konular