Как я могу передать логическое значение для оператора ожидаемого при тестировании с использованием mocha / chai? - PullRequest
0 голосов
/ 01 марта 2019

Использование Vue CLI У меня есть модульный тест, который я пытаюсь проверить на true / false, который выглядит следующим образом:

describe('The thing', () => {
    it('must be available.', () => {
        const available = true
        const wrapper = shallowMount(MyVueComponent, {
            propsData: { available },
        })
        expect(wrapper).to.be.true
    })
})

Когда я запускаю npm run test:unit

Я получаю следующее:

AssertionError: ожидается, что {Object (isFunctionalComponent, _emitted, ...)} будет истинным

Если я просто проверюзначение available, тогда все хорошо.Но похоже, что я делаю это неправильно.

Другие написанные мною тесты работают нормально, так как я проверяю текстовое значение:

describe('The thing', () => {
    it('should have a name.', () => {
        const name = 'Hal'
        const wrapper = shallowMount(MyVueComponent, {
            propsData: { name },
        })
        expect(wrapper.text()).to.include(name)
    })
})

Я не уверен, как проверитьчто available является логическим значением и должно быть true.Будем благодарны за любые предложения!

РЕДАКТИРОВАТЬ

Вот как выглядит мой компонент Vue:

export default {
    name: 'MyVueComponent',
    props: {
        name: String
    },
    data: function() {
        return {
            available: true,
        }
    },
}

РЕДАКТИРОВАТЬ 2

Кажется, это работает в моем модульном тесте:

describe('The thing', () => {
    it('must be available.', () => {
        const available = true
        const wrapper = shallowMount(MyVueComponent, {
            propsData: { available },
        })
        expect(wrapper.vm.available).to.be.true
    })
})

Тем не менее, он смотрит на мой фактический компонент в моем каталоге /src.Если я изменю значения данных с true на false, мои тесты пройдут правильно.Я не уверен, как сделать так, чтобы данные оставались на тестовом уровне.Поэтому, если бы я изменил const available = false, мой тест не прошел бы - но это не так.

РЕДАКТИРОВАТЬ 3

Кажется, это работает (для доступа кобъект данных):

describe("The thing", () => {
  it("must be available.", () => {
    const defaultData = MyVueComponent.data();
    // const wrapper = shallowMount(MyVueComponent, {});
    expect(defaultData.available).to.be.true;
  });
});

Но все равно кажется неправильным, что я ссылаюсь на свой реальный код, а не придерживаюсь модульных тестов.

1 Ответ

0 голосов
/ 01 марта 2019

Вы хотите проверить полученный реквизит, который вы можете сделать с wrapper.props()

describe('The thing', () => {
    it('must be available.', () => {
        const available = true
        const wrapper = shallowMount(MyVueComponent, {
            propsData: { available },
        })
        expect(wrapper.props().available).to.be.true
        // or: 
        // expect(wrapper.props().available).to.equal(available)
    })
})

у Чая .to.be.true и .to.equal используйте ===, поэтому нет необходимости отдельно проверять, действительно ли это логическое значение, но если вы предпочитаете его "выразительность", вы можете также проверить его:

expect(wrapper.props().available).to.be.a('boolean')
...