2014-12-14 14 views
6

Tôi đang cố gắng để làm một thử nghiệm "nó hoạt động" cơ bản cho một Mixin đó là có nghĩa là để được sử dụng với một mô hình. Tôi giả định cách tiếp cận để kiểm tra đơn vị Mixin nên được thực hiện không phải trên Mixin chính nó nhưng một lớp mô hình chung mà Mixin này trộn lẫn.Đơn vị thử nghiệm một mô hình Mixin

Giả sử giả định đầu tiên/chiến lược này có ý nghĩa thì đây là những gì tôi đã thử làm:

import DS from 'ember-data'; 
import Ember from 'ember'; 
import DictionaryManagerMixin from 'trainer/mixins/dictionary-manager'; 

module('DictionaryManagerMixin'); 

test('it works', function() { 
    var DictionaryManagerModel = DS.Model.extend(DictionaryManagerMixin, { 
     title: DS.attr('string') 
    }); 
    var myStore = DS.Store.create(); 
    var subject = myStore.createRecord(DictionaryManagerModel); 
    ok(subject); 
}); 

này không hoạt động, đưa ra các lỗi sau:

TypeError: Cannot read property 'lookup' of undefined 
    at null.<anonymous> (http://localhost:4200/assets/vendor.js:95610:35) 
    at Descriptor.ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:28466:25) 
    at get (http://localhost:4200/assets/vendor.js:33944:21) 
    at Ember.Object.extend.adapterFor (http://localhost:4200/assets/vendor.js:97005:27) 
    at Ember.Object.extend._generateId (http://localhost:4200/assets/vendor.js:95682:28) 
    at Ember.Object.extend.createRecord (http://localhost:4200/assets/vendor.js:95654:32) 
    at Object.eval (trainer/tests/unit/mixins/dictionary-manager-test.js:17:28) 
    at Object.Test.run (http://localhost:4200/assets/test-support.js:2632:18) 
    at http://localhost:4200/assets/test-support.js:2719:10 
    at process (http://localhost:4200/assets/test-support.js:2435:24) 

Bất kỳ trợ giúp sẽ được đánh giá rất nhiều.

+0

Tôi đang làm tương tự nhưng sử dụng mixin làm đơn vị để kiểm tra thay vì thử nghiệm mô hình. Nếu bạn sử dụng ember-cli, khi bạn 'tạo ra mixin' nó tạo ra các thử nghiệm cho bạn – leojh

Trả lời

0

Thường là lookup yêu cầu vùng chứa, vì vậy đó là gợi ý cho những gì tôi đang nghĩ đang gây ra sự cố. Điều này có ý nghĩa bởi vì DS dựa vào một vùng chứa để có thể tra cứu các mô hình đã đăng ký tại model:model-name;

Vì vậy, sự phụ thuộc thử nghiệm của bạn cho mixin này thực sự trên Dữ liệu Ember được thiết lập đúng cách. Vì vậy, nếu bạn thử nghiệm của bạn để nó hoạt động cho một mô hình dữ liệu Ember, mixin nhiều hơn hoặc ít hơn chỉ rơi vào vị trí với các thiết lập đối tượng như thế nào nó mong đợi.

tôi sẽ nói hãy thử sử dụng moduleForModel, từ hữu ích Ember doc:

moduleForModel('dictionary-manager-model'); 

test('your test here', function(assert) { 
    // this.subject aliases the createRecord method on the model 
    const dictionaryManagerModel = this.subject(); 
}); 

Bạn cần phải có điều kiện cuộn trong mixin với mô hình? Nếu mô hình của bạn luôn sử dụng mixin, bạn có thể làm điều đó trong tệp định nghĩa mô hình và chỉ kiểm tra nó như được hiển thị ở trên. Trong ví dụ của bạn, mixin đang được thêm vào mô hình và mô hình đang được chuyển đến createRecord` nhưng không được khuyến khích:

https://github.com/emberjs/data/blob/v2.14.10/addon/-private/system/store.js#L351 assert( Việc chuyển lớp sang phương thức lưu trữ đã bị xóa. Vui lòng chuyển một chuỗi bị phá hủy thay vì $ {modelName} , typeof modelName === 'string'); đó là lý do chúng tôi dựa vào tra cứu trên vùng chứa.

Về cơ bản, tôi nghĩ bạn đang theo thử nghiệm Mô hình, không phải thử nghiệm mixin. Trừ khi mixin có thể được cuộn vào cái gì đó không phải là một mô hình và vẫn hoạt động.

ember generate model-test dictionary-manager-model nếu nó chưa tồn tại, và sau đó tệp mô hình của bạn đã trộn lẫn trong đó. Ngoài ra, có lẽ điều này không cần phải là một mixin riêng biệt?

Hy vọng điều này sẽ giúp bạn bắt đầu đúng hướng, chúc mừng! ✌

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