不应该按预期工作

时间:2018-03-26 10:46:02

标签: javascript should.js assertj

我是新手,应该测试。总是使用Assert,但我正在尝试新选项。

这个简单的测试不起作用,我很想知道原因。

Profile.js

class Profile {

    constructor(profile_name,user_name,email,language) {
        this.profile_name = profile_name;
        this.user_name = user_name;
        this.email = email;
        this.language = language;
    }

}

module.exports = Profile;

Profile_test.js

let should = require('should');

let Profile = require('../lib/entities/Profile');

describe('Profile', function() {

    describe('#constructor', function() {

        it('should return a Profile object', function() {
            let profile = new Profile('alfa','Alfa da Silva','alfa@beta.com','java');
            let valid = { profile_name: 'alfa', user_name: 'Alfa da Silva', email: 'alfa@beta.com', language: 'java'};
            profile.should.equal(valid);
        });

    });

});

但是我收到以下错误:

  
    

资料        #constructor          1)应该返回一个Profile对象

         传递0次(62ms)      1失败

         

1)简介           #constructor             应该返回一个Profile对象:

 AssertionError: expected Profile {
         

个人资料名称:' alfa',      user_name:' Alfa da Silva',      电子邮件:' alfa@beta.com',      语言:' java'     成为对象{      profile_name:' alfa',      user_name:' Alfa da Silva',      电子邮件:' alfa@beta.com',      语言:' java'     }          +预期 - 实际

 at Assertion.fail (node_modules/should/cjs/should.js:275:17)
 at Assertion.value (node_modules/should/cjs/should.js:356:19)
 at Context.<anonymous> (test/Profile_test.js:12:19)
  

这里有什么问题?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您必须使用 profile.should.match 。因为两个对象的原型是不同的。您可以从here获取信息。

 let should = require('should');

let Profile = require('../lib/entities/Profile');

describe('Profile', function() {

    describe('#constructor', function() {

        it('should return a Profile object', function() {
            let profile = new Profile('alfa','Alfa da Silva','alfa@beta.com','java');
            let valid = { profile_name: 'alfa', user_name: 'Alfa da Silva', email: 'alfa@beta.com', language: 'java'};
            profile.should.match(valid);
        });

    });

});

答案 1 :(得分:0)

是。来自should documentation

  

should.equal(actual,expected,[message])

     

Node.js标准assert.equal。

Nodejs documentation我们知道assert.equal(...)

  

使用抽象平等比较(==)测试实际参数和预期参数之间的浅层强制相等。

您似乎需要使用eql(..)deepEqual(..)。像

这样的东西
profile.should.be.eql(valid);