2016-12-24 17 views
5

Tôi đang có một bài kiểm tra đơn vị cơn ác mộng bằng văn bản cho thiên thạch. Có quá nhiều bài viết cũ, lỗi thời và quá ít tài liệu liên quan rõ ràng, có liên quan để tôi có thể tìm ra những gì tôi thực sự cần làm để làm việc này.Làm thế nào để đơn vị kiểm tra một phương pháp sao băng với thực tếmeteor: mocha

Tôi đang gặp rắc rối sau khi gặp sự cố và thực sự hy vọng ai đó có thể chỉ cho tôi cách viết bài kiểm tra cho một trong các phương pháp của tôi để tôi có thể xem họ đã làm gì và đảo ngược kỹ thuật đó .

Dưới đây là một phương pháp Tôi muốn viết một bài kiểm tra cho:

Meteor.methods({ 
    'client.new':(clientDetails) => { 
    check(clientDetails, { 
     name: String, 
     numberTeamMembers: String 
    }); 

    clientDetails.teamMembers = []; 

    if(!Meteor.userId() || !Roles.userIsInRole(Meteor.userId(), 'administrator')) { 
     throw new Meteor.Error('500', 'You are not authorised to do this.'); 
    } 

    if(Clients.findOne({ name: clientDetails.name})) { 
     throw new Meteor.Error('500', 'This client name already exists!'); 
    }; 

    return Clients.insert(clientDetails); 
    }, 
}); 

Cho đến nay tôi đã có dưới đây:

import { Meteor } from 'meteor/meteor'; 
import { expect, be } from 'meteor/practicalmeteor:chai'; 
import { describe, it, before } from 'meteor/practicalmeteor:mocha'; 
import { resetDatabase } from 'meteor/xolvio:cleaner'; 
import { Random } from 'meteor/random'; 

import { Clients } from '/imports/api/clients/clients.js'; 

import '/imports/api/clients/server/methods.js'; 

describe('Client Methods in API', function() { 
    before(function() { 
    resetDatabase(); 
    }); 

    it('can create a Client', function(){ 
    let clientName = "Microsoft", 
     numberTeamMembers = "5", 
     data = { 
      name: clientName, 
      numberTeamMembers: numberTeamMembers 
     }; 

    let userId = Accounts.createUser({username: "admin", email: "[email protected]", password: "password"}); 
    Meteor.users.update({ _id: userId }, { $set: { roles: [ 'administrator' ] }}); 

    let method = Meteor.server.method_handlers['client.new']; 

    method.apply(userId, [data]); 


    let client = Clients.findOne(); 

    expect(Clients.find().count()).to.equal(1); 
    expect(client.name).to.equal(clientName); 
    expect(client.numberTeamMembers).to.equal(numberTeamMembers); 
    }); 
}); 

Các lỗi các thử nghiệm trên ném là trước hết nó nói tôi rằng Meteor.userId can only be invoked in method calls. Use this.userId in publish functions. không liên quan vì đây là phương pháp tôi đang thử nghiệm. Thứ hai, phương thức ném lỗi ('Bạn không được phép thực hiện điều này') vì vậy hoặc nó không nhận ra Meteor.userId() hoặc thực tế là người dùng nằm trong vai trò 'quản trị viên'.

Nếu ai đó có thể chỉ cho tôi cách họ kiểm tra phương pháp đó, tôi thực sự đánh giá cao nó!

Cảm ơn

+0

tài cần phải đăng nhập trước khi phương thức được gọi. thậm chí tôi cũng gặp vấn đề tương tự. Lemme biết nếu bạn tìm thấy bất cứ điều gì. –

Trả lời

1

Tôi nghĩ rằng bạn cần phải Stud phương pháp Meteor.user(), hãy thử này:

import { Meteor } from 'meteor/meteor'; 
import { resetDatabase } from 'meteor/xolvio:cleaner'; 
import { sinon } from 'meteor/practicalmeteor:sinon'; 

describe('...',() => { 
    let currentUser; 

    beforeEach(() => { 
    resetDatabase(); 
    Factory.define('user', Meteor.users, { 
     profile: { 
     // ... 
     }, 
    }); 
    currentUser = Factory.create('user'); 
    sinon.stub(Meteor, 'user'); 
    Meteor.user.returns(currentUser); 
    }); 

    afterEach(() => { 
    Meteor.user.restore(); 
    resetDatabase(); 
    }); 

    it('...',() => { 
    // ... 
    }); 
}); 

Bạn cần phải thêm những gói: dburles:factory, xolvio:cleaner, practicalmeteor:sinon

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